Netty之HelloWorld

現在Java網絡編程框架這塊基本已經被Netty壟斷了,幾乎所有框架底層的RPC通信都是使用Netty來實現,Netty是一個高性能的異步通信框架,採用Java的NIO編寫,它屏蔽了NIO的一些晦澀的編程模式,使NIO編程變得更加容易。

我們首先來寫一個簡單的Helloworld作爲Netty的入門,我們會對主要的代碼做一些簡單的解釋,等以後再來詳細每個組件的使用。

服務端

首先來編寫服務端的代碼。

第14,15行的NioEventLoopGroup是一個NIO多線程IO處理器,這裏一共用到了2個EventLoopGroup,第一個稱作boss,接受即將來臨的連接,第二個稱作worker,在boss接受連接並將接受的連接註冊到worker之後,處理連接上的的通信請求。

第17行的ServerBootstrap是用於創建服務端的輔助類,用於設置連接參數,EventLoopGroup,Handler等。

第22行的ChannelInitializer用於幫助用戶配置channel,我們可以方便的在上面添加多個channelHandler,在相應的channelHandler完成我們對消息的處理。

第28行則是啓動服務端並將其綁定在8080端口

服務端的消息處理流程則是在25行的TestServerHandler中完成。我們來看TestServerHandler的代碼

首先繼承ChannelInboundHanderAdaper,重寫channelRead方法,該方法在channel中有數據來臨時被調用,我們使用ByteBuf來進行消息讀取與發送(ByteBuf是JDK中ByteBuff的升級版),發送完消息後釋放掉msg的引用。

總結一下我們這個簡易服務端的處理流程:接受到來自客戶端的消息並打印,然後返回給客戶端一個“response”字符串。

服務端的代碼到此就已經全部完成了,接下來是客戶端的代碼。

客戶端

第15行因爲客戶端不需要處理來自其他客戶端的連接,所以不需要boss EventLoopGroup,只需要一個work EventLoopGroup即可

第17行的Bootstrap類似於服務端的ServerBootstrap是用於創建客戶端的輔助類。

第24行是添加客戶端處理邏輯的Handler

第28行指定host與端口連接到對應得服務端。

來看TestClientHandler的代碼。

同樣繼承ChannelInboundHandlerAdapter,只不過客戶端多重寫了一個channelActive方法,該方法在channel激活時被調用,即一連接上服務端時就調用該方法,相當於客戶端的初始化方法,這裏在方法向服務端發送了一個“hello”。在channelRead方法中接受來自服務端的消息並將其打印。

服務端與客戶端的代碼都已經開發完了,接下來分別啓動它們,查看結果。

運行

首先啓動服務端,然後是客戶端,查看控制檯。

可以看到服務端接受到了客戶端發來的“hello”。

客戶端接受到了來自服務端的響應“response”

至此,一個簡單的Netty HelloWorld就已經完成了,如果瞭解過Java NIO的同學應該可以對比出來,使用Netty大大節省了我們的工作量,而且代碼邏輯更加清晰,代碼整潔度更高。由於只是一個入門示例,還有很多的知識點沒有涉及,比如TCP/IP的拆包與粘包,心跳機制等,在以後的文章在詳細介紹,也會更加深入的介紹上面提到的一些組件(EventLoopGroup等)。

至此,敬禮。

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