`
ssxxjjii
  • 浏览: 938651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Netty4更新详解

 
阅读更多

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应用中文详解

    Netty应用中文详解

    Netty4详解二:开发第一个Netty应用程序

    在本篇文章中,我们将深入探讨如何使用Netty4开发第一个Netty应用程序,以此来理解其核心概念和工作原理。 首先,我们要明白Netty的基本架构。Netty基于NIO(非阻塞I/O)设计,通过EventLoop(事件循环)和Channel...

    Netty4.x源码分析详解

    在深入分析 Netty 4.x 源码之前,我们首先需要了解其核心概念和架构。 Netty 的核心组件包括: 1. **ByteBuf**: 作为传统 ByteBuffer 的替代品,ByteBuf 提供了更高效且易用的内存管理机制,支持读写分离,避免了...

    SMSGate-netty4.zip

    《基于Netty4的JAVA语言实现的三网短信网关详解》 在信息技术飞速发展的今天,通信领域的标准和协议也在不断更新和完善。本文将详细探讨一个基于Java语言,利用Netty4框架实现的三网协议模拟网关,以及客户端支持,...

    Netty网络框架客户端和服务端通讯示例代码

    4、使用IDEA分别导入NettyClient和NettyServer在两个窗体中 5、在服务端输入指定的端口,然后点击“启动Nettye服务器按钮”启动服务端。 6、在客户端输入服务IP地址和端口,然后点击“开启客户端”按钮。 如果一切...

    netty详解.txt

    netty超实用课程讲解,从开始到精通的一步步讲解,内含netty的高级应用和使用场景

    java_Netty权威指南,详解nio,tcp,http,netty

    4. 通道管道:ChannelPipeline是处理器链的容器,负责事件在处理器之间的传递。 5. 异步模型:Netty的所有I/O操作都是异步的,允许在等待结果时执行其他任务,提高系统效率。 通过以上内容的介绍,我们可以看到...

    Netty快速入门视频全套详解教程

    Netty快速入门视频全套详解教程(内附有网盘链接地址),讲的非常详细,每个知识点附有代码demo

    netty视频详解(90节大长篇)

    netty深入学习包括重要地方的源码分析以及java nio的详解,绝对干货!!!

    netty3的完整配置实例

    在 Netty 3 的配置中,我们需要确保包含所有必要的 Netty jar 包,以及其他可能的第三方库,如 Log4j 或 SLF4J 用于日志记录。 2. **src/main/java**:源代码目录,包含你的服务器或客户端应用的 Java 类。在 Netty...

    netty原理的讲解

    Netty是一个高性能、异步事件驱动的网络应用框架,它为Java开发人员提供了构建服务器和客户端应用程序的高效工具。在深入探讨Netty之前,我们先理解一下IO流的基础概念。 IO流是Java中处理输入输出的基本方式,分为...

    跟闪电侠学Netty:Netty即时聊天实战与底层原理-book-netty.zip

    4. **Netty编程模型**:包括客户端和服务端的创建、连接建立、数据读写、异常处理等,通过编写自定义的Handler来实现业务逻辑。 5. **即时聊天实战**:书中会介绍如何使用Netty构建一个简单的即时聊天应用,涉及...

    使用Netty解决TCP粘包和拆包问题过程详解

    使用Netty解决TCP粘包和拆包问题过程详解 Netty是一个流行的Java网络编程框架,提供了简洁、灵活的API来处理网络编程的各种问题。其中,解决TCP粘包和拆包问题是Netty的一个重要应用场景。本文将详细介绍使用Netty...

    基于netty4的http代理,真实项目工程可商用

    "基于Netty4的http代理" 指的是利用Netty框架实现的一个HTTP代理服务器项目,这个项目适用于实际的商业环境。HTTP代理服务器作为一个中间人,允许客户端通过它与远程HTTP服务器进行通信,可以用于访问受限网站、提高...

    基于Netty5.0的高级案例NettyWebsocket

    4. **Netty的WebSocket实现**:在Netty中,WebSocket服务器通常会包含以下组件: - `WebSocketServerProtocolHandler`:处理WebSocket升级握手。 - `WebSocketFrameDecoder` 和 `WebSocketFrameEncoder`:解码和...

    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输示例代码.rar

    4. **处理器(ChannelHandler)**: - ChannelHandler是Netty处理I/O事件的核心组件,包括Inbound和Outbound两种类型,分别处理入站事件(如连接、接收数据)和出站事件(如发送数据、关闭连接)。 - 通常,我们会...

    93个netty高并发教学视频下载.txt

    24_gRPC整合Gradle与代码生成············82_Netty引用计数原子更新揭秘与AtomicIntegerFieldUpdater深度剖析;83_AtomicIntegerFieldUpdater实例演练与volatile关键字分析;84_Netty引用计数注意事项与...

    SpringBoot整合Netty心跳机制过程详解

    SpringBoot 整合 Netty 心跳机制过程详解 SpringBoot 整合 Netty 心跳机制过程详解是指通过 SpringBoot 框架整合 Netty 网络框架来实现心跳机制的过程。心跳机制是指客户端和服务端之间的连接维持机制,当客户端和...

Global site tag (gtag.js) - Google Analytics