Netty2: 事件驅(qū)動(dòng)的NIO框架
Netty 2 提供了一組很容易的基于事件的API(類(lèi)似于Swing)來(lái)開(kāi)發(fā)高性能, 可管理的TCP/IP服務(wù)端或客戶端應(yīng)用程序. 對(duì)于要求建立高性能的的網(wǎng)絡(luò)應(yīng)用來(lái)說(shuō),Netty提供許多基本特性,像readiness selection, 線程池, 寫(xiě)緩沖DoS的預(yù)防, 可重用的緩沖等.
特性:
* 基于事件的API: Netty處理所有低級(jí)I/O調(diào)用
* 信息格式與工作流程是相互獨(dú)立的
* 以面向?qū)ο蟮姆绞綄?shí)現(xiàn)通訊協(xié)議
* Java NIO
* 內(nèi)建線程池
* 字節(jié)緩沖池
* 可自定的事件分發(fā): 具有彈性的線程調(diào)度
* '寫(xiě)緩沖溢出'的預(yù)防:
??? * 偵測(cè)過(guò)慢的客記端
??? * 清除已發(fā)送信息,避免資源不足
* JMX兼容: 線程池和公共配置就是MBean.
架構(gòu):
* I/O Processor執(zhí)行I/O操作, 將它們解釋為session事件, 并傳遞到EventDispatcher.
* EventDispatcher分發(fā)事件到相關(guān)的SessionListeners.
* 讀信息總是調(diào)用MessageRecognizer來(lái)從socket通道讀取送來(lái)的數(shù)據(jù), 從而識(shí)別出相關(guān)信息對(duì)象。
Message接口:
在Netty中,Message是通訊的基本單位。它提供了read和write方法來(lái)存取緩沖中的信息。
MessageRecognizer接口:
通過(guò)前面的架構(gòu)圖我們知道Netty的工作是基于Session的。當(dāng)條件成立的,session會(huì)自動(dòng)觸發(fā)相應(yīng)的I/O事件,在session內(nèi)部,當(dāng)數(shù)據(jù)收到時(shí),I/O工作線程會(huì)調(diào)用MessageRecognizer的recognize(ByteBuffer buf)方法,從字節(jié)重組得到Message對(duì)象。然后再觸發(fā)messageReceived事件。所以如果你定義了自己的消息格式,還要實(shí)現(xiàn)MessageRecognizer接口來(lái)將緩沖區(qū)中接收到的字節(jié)碼重組為你的Message格式。
接收Message:
為了方便,這里沒(méi)有畫(huà)出MessageRecognizer。
發(fā)送Message:
?
posted on 2006-06-20 19:40
happytian 閱讀(480)
評(píng)論(0) 編輯 收藏