美文网首页
Essential Netty in Action学习(一)

Essential Netty in Action学习(一)

作者: KamTo_Hung | 来源:发表于2018-01-16 22:10 被阅读0次

    什么是Netty

    Netty是Java的网络框架,提供一个简易的API给我们开发客户端/服务器.

    Java网络处理几种方式

    • 使用JAVA API原生的socket方式处理
      这种方式为阻塞式,缺点很明显.每次只能处理一个连接.为了处理多个并行的客户端,我们需要分配每一个新的Thread给每个新的客户端,来支持同步和长连接.在任何时间点多线程可能处于休眠状态,这时候如果不进行输入或者输出数据就会浪费大量的资源.


      JAVA NIO
    • JAVA NIO
      NIO旧时意思是New Input/Output,现在为Nonblocking I/O.
    • SELECTOR
      SELECTOR
      如图所以,和JAVA NIO区别是Selector最终决定哪个socket准备执行I/O.通过这种方式,一个线程可以同时处理多个并发链接.(一个Selector由一个线程处理,但是具体实施可以使用多个线程.).这种模式把资源更好地使用,因为
      • 可以用较少的线程处理更多的连接,意味着更少的开销在内存和上下文切换上.
      • 当没有I/O处理时,县城可以被重定向到其他任务上.

    Netty的特点:

    • 设计
      • 针对多种传输类型的统一接口 - 阻塞和非阻塞
      • 简单但更强大的线程模型
      • 真正的无连接的数据报套接字支持
      • 链接逻辑支持复用
    • 易用性
      • 大量的 Javadoc 和 代码实例
      • 除了在 JDK 1.6 + 额外的限制。(一些特征是只支持在Java 1.7 +。可选的功能可能
        有额外的限制。)
    • 性能
      • 消除由于慢,快,或重载连接产生的 OutOfMemoryError
      • 消除经常发现在 NIO 在高速网络中的应用中的不公平的读/写比
    • 安全
      • 完整的 SSL / TLS 和 StartTLS 的支持
      • 运行在受限的环境例如 Applet 或 OSGI
    • 社区
      • 发布的更早和更频繁
      • 社区驱动

    构成部分

    • Channel

    Channel的意思是渠道,是NIO基本结构.可以把它看成一种连接作用的组件,是数据传输的一种工具.

    • Callback

    Callback意思是回调,提供一个方法给另一种方法引用,另一种方法可以在自己需求的情况下(比如需要解码),调用callback方法.

    • Future

    Future提供了另外一种通知应用操作已经完成的操作.这个对象作为一个异步操作结果的占位符,它将在将来的某个时候完成并提供结果.
    Netty中,提供了ChannelFuture,ChannelFuture提供了多个附件方法允许一个或者多个ChannelFutureListener实例.我们可以通ChannelFutureListener的监听机制不需要手动检查操作是否完成.
    每一个Netty的outbound I/O操作都会返回一个ChannelFuture,这样才不会阻塞.这就是Netty所谓的"自底向上的异步和事件驱动".

    • Event和Handler
    Event and Hander.png

    如图所示,其实每个处理器实例就是一个回调,用来执行对各种事件的处理.
    Netty通过触发事件从应用程序中抽象出Selector,而EventLoop分配给每个Channel来处理所有的时间,包括

    • 注册事件
    • 调度handler
    • 安排其他的动作
      EventLoop本身只有一个线程驱动,它给一个Channel处理所有的I/O事件,并且在它的生命周期内是不会变的.

    相关文章

      网友评论

          本文标题:Essential Netty in Action学习(一)

          本文链接:https://www.haomeiwen.com/subject/hiysoxtx.html