netty使用从0到1

Posted 互联网开发者Club

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了netty使用从0到1相关的知识,希望对你有一定的参考价值。

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放        本周强总在组内做了netty分享,内容相当不错,趁着这次分享记录的,以及以前研究,进行一下记录。

       java io形式存在三种,一种是BIO传统IO是阻塞IO,面向字符、字节服务都属于这一种。NIO官方意思是新IO框架,相比原有java io框架,大家更倾向于把NIO理解为无阻塞IO,性能有着极大优势,但编程比原有jdk io框架复杂不止一个数量级,幸运的事业界有了及其成熟nio框架netty。再有就是AIO无阻塞异步IO,netty2.0实现包含异步IO实现。


       netty是网络通信框架,有及其高效网络通信效率,相比jdk原生NIO复杂,对于实现高性能网络编程实现有着很好易用性。


      netty脱胎JBoss,JBoss一个与Tomcat类似的web容器,相比于tomcat会提供消息队列等更多服务,但JBoss最终还是惜败于Tomcat,Tomcat成功于简单,应用简单开箱即用,有的时候设计简单就是竞争力。


      netty作为性能高效通信框架,有着广泛用途。

      以netty为基础可以作为推送框架使用,单台服务器能保持极多用户连接,编写应用得当消息推送框架,单台服务器可以支持c100k连接。


      netty可以作为高性能通信使用,在java rpc中到处都有netty身影。hdfs rpc基于netty构建,开源业界影响最大微服务框架dubbo通信基于netty实现,京东内部微服务JSF通信也是基于netty实现。netty在java高性能通信场景下,当前有着垄断的地位。


      关于netty版本,Final版本为netty release版本,可用于线上服务,当下最新为4.1.x版本,尽量用4.x版本,因为3.x版本存在一定内存泄漏问题,并且3.x api与4.x存在着较大差异,新用netty建议从4.x直接用起来。


      Netty提供了几个常用的解码器,帮助我们解决这些问题,其实上述的粘包和拆包的问题,归根结底的解决方案就是发送端给远程端一个标记,告诉远程端,每个信息的结束标志是什么,这样,远程端获取到数据后,根据跟发送端约束的标志,将接收的信息分切或者合并成我们需要的信息,这样我们就可以获取到正确的信息了。


      netty内存泄露,netty编程要注意内存泄露,Netty里四种主力的ByteBuf,
其中UnpooledHeapByteBuf 底下的byte[]能够依赖JVM GC自然回收;而UnpooledDirectByteBuf底下是DirectByteBuffer,如JAVA碓外内存扫盲贴所述,除了等JVM GC,最好也能主动进行回收;而PooledHeapByteBuf 和 PooledDirectByteBuf,则必须要主动将用完的byte[]/ByteBuffer放回池里,否则内存就要爆掉。所以,Netty ByteBuf需要在JVM的GC机制之外,有自己的引用计数器和回收过程。

       

      netty相关好书籍,《Netty权威指南》,作者李林锋,netty领域多年实战着。

      

              

以上是关于netty使用从0到1的主要内容,如果未能解决你的问题,请参考以下文章

一文理解Netty模型架构

Netty,网络通信的权威专家

Netty网络编程框架的核心概念以及入门案例

netty使用从0到1

Netty模型篇一:Netty 线程模型架构 & 工作原理 解读

从0到1 ▏Netty编解码框架之多种常用解码器使用示例解析