Essential Netty in Action学习(一)

什么是Netty

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

Java网络处理几种方式

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


    Essential Netty in Action学习(一)_第1张图片
    JAVA NIO
  • JAVA NIO
    NIO旧时意思是New Input/Output,现在为Nonblocking I/O.
  • SELECTOR
    Essential Netty in Action学习(一)_第2张图片
    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
Essential Netty in Action学习(一)_第3张图片
Event and Hander.png

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

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

你可能感兴趣的:(Essential Netty in Action学习(一))