zoukankan      html  css  js  c++  java
  • 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领域多年实战着。

          扫码关注公众号

  • 相关阅读:
    Noe4j启动警告
    SpringBoot
    MySQL数据库 java SQL语句区分大小写分析
    day24 模块的语法
    day23 re模块
    day22 常用模块02 序列化
    day21 常用模块01
    day20 面向对象06 MRO和C3算法
    day19 面向对象05 约束
    day18 面向对象04 反射
  • 原文地址:https://www.cnblogs.com/freedommovie/p/8056729.html
Copyright © 2011-2022 走看看