netty现在应该是java界最流行的网络框架之一了,高性能,可扩展,代码优雅。之前做的页游都是用netty3.x来做网络层通信。最近看到netty4快要出来了,一些新的特性还是很值得推介的。
ChannelBuffer变成了ByteBuff。还引入了Buff对象池Unpooled来管理回收不用的buff,避免gc的频率。在netty3中,buff都是固定大小或者dynamic(write*需要更多的空间)。
为了解决这些问题。 netty4中的所有buff都是动态大小的,可以随意更改capacity,并且性能更好。
CompositeByteBuf是新引入的,可以避免大块内存的拷贝。当你需要组合一个新的buff时,用Unpooled.wrappedBuffer(...)或者Unpooled.compositieBuff(...) 重点要介绍一些ByteBuf对象池,当一个ByteBuf被对象池回收后,可以重复利用,从而避免了频繁的内存分配和gc。当一个ByteBuf被write到目标socket是,它会自动被回收到对象池。
概念的更改,变得更容易理解了。Upstream变成Inbound,Downstream变成了Outbound。
之前netty3每次io读写,都会new一个ChannelBuffer,会导致gc频繁。netty4将socket的数据直接存入inbound buffer,并且使用了对象池技术后会改善这种状况。
netty3的事件处理笼统归为handleUpstream和handleDownstream 。
netty4引入了更具体的事件,包括:
void channelRegistered(ChannelHandlerContext ctx) throws Exception;
void channelUnregistered(ChannelHandlerContext ctx) throws Exception;
void channelActive(ChannelHandlerContext ctx) throws Exception;
void channelInactive(ChannelHandlerContext ctx) throws Exception;
void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception;
netty4还简化了channel状态模型。之前一个channel connect后,会触发channelOpen, channelBound, 和 channelConnected.
channel关闭后会触发 channelDisconnected, channelUnbound, 和channelClosed.
上面的几个事件被合并成channelActive 和 channelInActive。 messageReceived 和 writeRequested 被 inboundBufferUpdated 和flush 替换了。
Channel支持 half-closed,可以指定关闭后接收剩余的数据。
netty4中,EventLoopGroup取代了ChannelFactory,一个channel必须显式地registere 到EventLoopGroup。这样有个好处,就是在不同的业务中,Channel可以随时deregister和registered到某个EventLoopGroup中去。
EventLoop 是本质上也是一个ScheduledExecutorService,所以一个channel的一些定时操作也可以交由它去执行。从而保证了一个channel的所有操作都是在同一个线程中执行了。。这样的内存模型可以简化很多的线程问题。
之前ChannelConfig 的配置项项都是用字符串定义的。容易出问题。netty4重新定义了常量。例如 cfg.setOption(ChannelOption.TCP_NODELAY, true);
引入了AttributeMap,可以存储任何对象到Channel中。
netty4的改进是很值得推荐的,尤其是内存分配方面的改进,今后更高并发的系统将变得可能,gc造成的延迟也讲得到改善。 准备在netty4正式版出来,稳定之后用于下一个新游戏项目中。到时再跟大家分享一些心得和体会。
准备将blog搬到这里了,希望能跟大家多分享交流技术,thanks
分享到:
相关推荐
akka-remote-transport-netty4(deprecated) 一个新的实现基于 akka 流。不是开源的... ##现在只支持 TCP。在 UDP 上没有 SSL 没有 Docker 支持,很快就会添加,文档会在我不那么忙的时候更新。 像这样使用它 akka...
netty4中文用户手册,更新到2016年3月份,清晰,非扫描,下载后请好评
1.实现了发送文字聊天 用户上下下线自动更新聊天列表 网页保存聊天记录 2.发送文件 最大支持30兆 ,代码中可修改
82_Netty引用计数原子更新揭秘与AtomicIntegerFieldUpdater深度剖析 83_AtomicIntegerFieldUpdater实例演练与volatile关键字分析 84_Netty引用计数注意事项与内存泄露检测方式 85_Netty编解码器剖析与入站出站处理器...
第82讲:Netty引用计数原子更新揭秘与AtomicIntegerFieldUpdater深度剖析 第83讲:AtomicIntegerFieldUpdater实例演练与volatile关键字分析 第84讲:Netty引用计数注意事项与内存泄露检测方式 第85讲:Netty编...
Netty-Transport-jSerialComm升级版本(v2.0.0) ...4)打包生成 netty-transport-jserialcomm-2.0.0.jar、netty-transport-jserialcomm-2.0.0-javadoc.jar、netty-transport-jserialcomm-2.0.0-sources.jar三个包
精通并发与netty视频教程(2018)视频教程 netty视频教程 Java视频教程目录: 1_学习的要义 2_Netty宏观理解 3_Netty课程大纲深度解读 4_项目环境搭建与Gradle配置 5_Netty执行流程分析与重要组件介绍 6_Netty回调与...
使用netty4.X实现的手机游戏服务器,支持tcp,udp,http,websocket链接,采用protobuf自定义协议栈进行网络通信,支持rpc远程调用,使用mybatis3支持db存储分库分表,支持异步mysql存储,db保存时同步更新reids缓存。...
- 使用netty4.X实现的手机游戏服务器,支持tcp,udp,http,websocket链接,采用protobuf自定义协议栈进行网络通信,支持rpc远程调用,使用mybatis3支持db存储分库分表,支持异步mysql存储,db保存时同步更新reids缓存。...
netty+websocket在线聊天室:基于Java构建,包含282个文件,其中包括205个GIF图像、29个JavaScript文件、12个Java类文件、11个CSS样式文件、4个JPG图像、3个HTML文件、3个PNG图像、3个FreeMarker模板文件(.ftl)、2...
slf4fx-netty-服务器SLF4Fx 服务器使用 Netty 而不是 Apache Mina。...变化0.6.0 此版本仅与 Netty 4 兼容(之前仅与 Netty 3.6 兼容) 将包名更改为 io.github.lkowalczyk 要求: JDK 1.5 或更新版本网状 3.6.6
Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入...持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不
代码清单已经更新到 Netty 4.1.11.final 内容提要 本书是为想要或者正在使用 Java 从事高性能网络编程的人而写的,循序渐进地介绍了 Netty 各个方面的内容。 本书共分为 4 个部分:第一部分详细地介绍 Netty 的相关...
主要使用业务场景1:游戏服务器2:实时通讯系统3:金融数据处理系统4:对网络实时性要求较高的系统5:常见互联网系统目前在更新阶段独立数据db模块,独立事务模块,独立线程调度模块。以微服务的形式提供网络服务。...
更新数据库IP/PORT/用户/密码,默认为(127.0.0.1:3306?oc_db&user_name=root&password=123456) 3. 如果集群部署,请修改hazelcast-dev.xml或者hazelcast-uat.xml, 具体规则可参考hazelcast官网...
《 Netty基础与源码分析》持续更新中... 本文结合了《 Netty权威指南》的一些知识点。 纸上得来终觉浅,源代码部分来自于自己对源码的解读,并加上一些主流开源框架对Netty使用的实践。 一,Linux网络I / O模型 1,...
2、netty接受数据以及websocket更新数据 3、netty和rabbitmq的实时更新数据 4、老人数据的发送 5、老人绑定家属以及解绑功能 【备注】 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的Java学习者。 也可...
netty网络客户端服务端 缓存 CSP模型队列执行器(采用jctools实现高吞吐的任务处理) 热更新框架 字节操作工具 加密解密 Maven <groupId>net.jueb</groupId> <artifactId>util4j <version>VERSION Gradle compile...
对Spring4的全方位练习,直接跳到注解版的Spring,跳过了Xml的配置 SpringWeb的练习,熟悉语法,加深对SpringBoot的理解 SpringBoot的各个模块的练习,持续更新中 Java集成Netty的练习,需要熟练掌握这个高性能的...
java-bible 这里记录了一些技术摘要,部分文章来自网络,本项目的目的力求分享精品技术干货,以Java为主。 如果你喜欢,star 便是,持续更新ing,还有Fork项目的同学,貌似没有什么卵用。...Netty4 用户指南