Essential Netty in Action学习(一)

什么是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事件,并且在它的生命周期内是不会变的.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容