netty现在应该是java界最流行的网络框架之一了,高性能,可扩展,代码优雅。之前做的页游都是用netty3.x来做网络层通信。最近看到netty4快要出来了,一些新的特性还是很值得推介的。
- 1.Buff
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是,它会自动被回收到对象池。
- 2.Channel
概念的更改,变得更容易理解了。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,可以指定关闭后接收剩余的数据。
- 3.I/0线程分配
netty4中,EventLoopGroup取代了ChannelFactory,一个channel必须显式地registere 到EventLoopGroup。这样有个好处,就是在不同的业务中,Channel可以随时deregister和registered到某个EventLoopGroup中去。
EventLoop 是本质上也是一个ScheduledExecutorService,所以一个channel的一些定时操作也可以交由它去执行。从而保证了一个channel的所有操作都是在同一个线程中执行了。。这样的内存模型可以简化很多的线程问题。
- 4.配置项和attach对象
之前ChannelConfig 的配置项项都是用字符串定义的。容易出问题。netty4重新定义了常量。例如 cfg.setOption(ChannelOption.TCP_NODELAY, true);
引入了AttributeMap,可以存储任何对象到Channel中。
- 总结
netty4的改进是很值得推荐的,尤其是内存分配方面的改进,今后更高并发的系统将变得可能,gc造成的延迟也讲得到改善。 准备在netty4正式版出来,稳定之后用于下一个新游戏项目中。到时再跟大家分享一些心得和体会。
相关推荐
Netty应用中文详解
在本篇文章中,我们将深入探讨如何使用Netty4开发第一个Netty应用程序,以此来理解其核心概念和工作原理。 首先,我们要明白Netty的基本架构。Netty基于NIO(非阻塞I/O)设计,通过EventLoop(事件循环)和Channel...
在深入分析 Netty 4.x 源码之前,我们首先需要了解其核心概念和架构。 Netty 的核心组件包括: 1. **ByteBuf**: 作为传统 ByteBuffer 的替代品,ByteBuf 提供了更高效且易用的内存管理机制,支持读写分离,避免了...
《基于Netty4的JAVA语言实现的三网短信网关详解》 在信息技术飞速发展的今天,通信领域的标准和协议也在不断更新和完善。本文将详细探讨一个基于Java语言,利用Netty4框架实现的三网协议模拟网关,以及客户端支持,...
4、使用IDEA分别导入NettyClient和NettyServer在两个窗体中 5、在服务端输入指定的端口,然后点击“启动Nettye服务器按钮”启动服务端。 6、在客户端输入服务IP地址和端口,然后点击“开启客户端”按钮。 如果一切...
netty超实用课程讲解,从开始到精通的一步步讲解,内含netty的高级应用和使用场景
4. 通道管道:ChannelPipeline是处理器链的容器,负责事件在处理器之间的传递。 5. 异步模型:Netty的所有I/O操作都是异步的,允许在等待结果时执行其他任务,提高系统效率。 通过以上内容的介绍,我们可以看到...
Netty快速入门视频全套详解教程(内附有网盘链接地址),讲的非常详细,每个知识点附有代码demo
- **案例三:物联网监控平台**:构建一个能够处理大量传感器数据并实时更新状态的平台。 #### 五、Netty 代码实战与源码剖析 - **实战演练**:通过具体的案例来演示如何使用Netty开发实际的应用程序。 - **源码...
Netty是一个高性能、异步事件驱动的网络应用框架,它为Java开发人员提供了构建服务器和客户端应用程序的高效工具。在深入探讨Netty之前,我们先理解一下IO流的基础概念。 IO流是Java中处理输入输出的基本方式,分为...
4. **Netty编程模型**:包括客户端和服务端的创建、连接建立、数据读写、异常处理等,通过编写自定义的Handler来实现业务逻辑。 5. **即时聊天实战**:书中会介绍如何使用Netty构建一个简单的即时聊天应用,涉及...
"基于Netty4的http代理" 指的是利用Netty框架实现的一个HTTP代理服务器项目,这个项目适用于实际的商业环境。HTTP代理服务器作为一个中间人,允许客户端通过它与远程HTTP服务器进行通信,可以用于访问受限网站、提高...
4. **Netty的WebSocket实现**:在Netty中,WebSocket服务器通常会包含以下组件: - `WebSocketServerProtocolHandler`:处理WebSocket升级握手。 - `WebSocketFrameDecoder` 和 `WebSocketFrameEncoder`:解码和...
4. **处理器(ChannelHandler)**: - ChannelHandler是Netty处理I/O事件的核心组件,包括Inbound和Outbound两种类型,分别处理入站事件(如连接、接收数据)和出站事件(如发送数据、关闭连接)。 - 通常,我们会...
使用Netty解决TCP粘包和拆包问题过程详解 Netty是一个流行的Java网络编程框架,提供了简洁、灵活的API来处理网络编程的各种问题。其中,解决TCP粘包和拆包问题是Netty的一个重要应用场景。本文将详细介绍使用Netty...
24_gRPC整合Gradle与代码生成············82_Netty引用计数原子更新揭秘与AtomicIntegerFieldUpdater深度剖析;83_AtomicIntegerFieldUpdater实例演练与volatile关键字分析;84_Netty引用计数注意事项与...
《Netty源码深入分析》是由美团基础架构部的闪电侠老师所分享的一系列关于Netty源码解析的视频教程。以下将根据标题、描述、标签以及部分内容等信息,对Netty及其源码进行深入剖析。 ### Netty简介 Netty是基于...
SpringBoot 整合 Netty 心跳机制过程详解 SpringBoot 整合 Netty 心跳机制过程详解是指通过 SpringBoot 框架整合 Netty 网络框架来实现心跳机制的过程。心跳机制是指客户端和服务端之间的连接维持机制,当客户端和...