網絡編程模型框架netty(一)

1.介紹

netty是一個基於java nio的網絡通信框架。Netty是一個NIO client-server(客戶端服務器)框架,使用Netty可以快速開發網絡應用,例如服務器和客戶端協議。Netty提供了一種新的方式來使開發網絡應用程序,這種新的方式使得它很容易使用和有很強的擴展性。Netty的內部實現時很複雜的,但是Netty提供了簡單易用的api從網絡處理代碼中解耦業務邏輯。Netty是完全基於NIO實現的,所以整個Netty都是異步的。網絡應用程序通常需要有較高的可擴展性,無論是Netty還是其他的基於Java NIO的框架,都會提供可擴展性的解決方案。Netty中一個關鍵組成部分是它的異步特性.

2.知識點記錄

2.1 netty中handle的執行順序

Handler在netty中,佔據着非常重要的地位,Handler與Servlet中的filter很像,通過Handler可以完成通訊報文的編碼解碼,攔截指定的報文,統一對錯誤進行處理,統一對請求進行計數,控制handler執行與否.Netty中的所有handler都實現自ChannelHandler接口,按照輸入輸出來分,分爲兩大類:

ChannelInBoundHandler對接收到的報文進行處理,一般用來執行解碼,讀取數據,進行業務處理等。

ChannelOutBoundHandler對發出去的報文進行處理,一般用來進行解碼,發送報文到對端。

Netty中可以註冊多個handler,ChannelInBoundHandler按照註冊的先後順序執行, ChannelOutBoundHandler按照註冊的先後逆序執行。

2.2 在使用的過程中需要注意

channelinboundhandler之間的傳遞,通過調用ctx.fireChannelRead(msg)實現,調用ctx.write(msg)將傳遞到ChannelOutBoundHandler.

ctx.write()方法執行之後,需要調用flush()方法才能另它立即生效。

使用ctx.write(msg)傳遞消息,Inbound需要放在結尾,在Outbound之後,不然outboundhandler會不執行; 但是使用channel.write(msg)、pipline.write(msg)情況會不一致,都會執行,那是因爲channel和pipline會貫穿整個流。

如果使用addlast方法來組裝handler,則爲以下執行順序,註冊兩個InboundHandler,執行順序爲註冊順序,所以應該是InboundHandler1 InboundHandler2。 註冊兩個OutboundHandler,執行順序爲註冊順序的逆序,所以應該是OutboundHandler2 OutboundHandler1 。

2.3 netty中,通訊的雙方建立連接後,會把數據按照Bytebuf的方式進行傳輸,例如 http協議中,就是通過HttpRequestDecoder對Bytebuf數據流進行處理,轉換成http對象,基於這個思路定義了一種通訊協議,server和client端直接傳輸java對象。實現的原理是通過encoder把java對象轉換 Bytebuf流進行傳輸,通過decoder把Bytebuf轉換成java對象進行處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章