现在的位置: 首页 > 综合 > 正文

Netty2: 事件驱动的NIO框架(基础知识)

2014年09月05日 ⁄ 综合 ⁄ 共 944字 ⁄ 字号 评论关闭

Netty2: 事件驱动的NIO框架

Netty 2 提供了一组很容易的基于事件的API(类似于Swing)来开发高性能, 可管理的TCP/IP服务端或客户端应用程序. 对于要求建立高性能的的网络应用来说,Netty提供许多基本特性,像readiness selection, 线程池, 写缓冲DoS的预防, 可重用的缓冲等.

特性:

* 基于事件的API: Netty处理所有低级I/O调用
* 信息格式与工作流程是相互独立的
* 以面向对象的方式实现通讯协议
* Java NIO
* 内建线程池
* 字节缓冲池
* 可自定的事件分发: 具有弹性的线程调度
* '写缓冲溢出'的预防:
??? * 侦测过慢的客记端
??? * 清除已发送信息,避免资源不足
* JMX兼容: 线程池和公共配置就是MBean.

架构:

* I/O Processor执行I/O操作, 将它们解释为session事件, 并传递到EventDispatcher.
* EventDispatcher分发事件到相关的SessionListeners.
* 读信息总是调用MessageRecognizer来从socket通道读取送来的数据, 从而识别出相关信息对象。

Message接口:

在Netty中,Message是通讯的基本单位。它提供了read和write方法来存取缓冲中的信息。

MessageRecognizer接口:

通过前面的架构图我们知道Netty的工作是基于Session的。当条件成立的,session会自动触发相应的I/O事件,在session内部,当数据收到时,I/O工作线程会调用MessageRecognizer的recognize(ByteBuffer buf)方法,从字节重组得到Message对象。然后再触发messageReceived事件。所以如果你定义了自己的消息格式,还要实现MessageRecognizer接口来将缓冲区中接收到的字节码重组为你的Message格式。

接收Message:

为了方便,这里没有画出MessageRecognizer。

发送Message:

?

Netty的首页,请访问http://gleamynode.net/dev/projects/netty2/index.html

我的Blog是http://blog.csdn.net/turbochen

抱歉!评论已关闭.