官术网_书友最值得收藏!

1.2 Netty服務端構建

TCP通信是面向連接的、可靠的、基于字節流的通信協議,有嚴格的客戶端和服務端之分,本節運用Netty構建TCP服務端,同時為后面構建分布式RPC服務器做好準備。

Netty服務端程序實現步驟如下。

(1)創建兩個線程組,分別為Boss線程組和Worker線程組。Boss線程專門用于接收來自客戶端的連接;Worker線程用于處理已經被Boss線程接收的連接。

(2)運用服務啟動輔助類ServerBootstrap創建一個對象,并配置一系列啟動參數,如參數ChannelOption .SO_RCVBUF和ChannelOption .SO_SNDBUF分別對應接收緩沖區和發送緩沖區的大小。

(3)當Boss線程把接收到的連接注冊到Worker線程中后,需要交給連接初始化消息處理Handler鏈。由于不同的應用需要用到不同的Handler鏈,所以Netty提供了ChannelInitializer接口,由用戶實現此接口,完成Handler鏈的初始化工作。

(4)編寫業務處理Handler鏈,并實現對接收客戶端消息的處理邏輯。

(5)綁定端口。由于端口綁定需要由Boss線程完成,所以主線程需要執行同步阻塞方法,等待Boss線程完成綁定操作。

在編碼前先構建開發環境。開發工具選擇Spring Tool Suite或IntelliJ IDEA,其他工具選擇Maven v3.2.5、JDK v1.8、穩定版的Netty v4.1.38.Final。首先打開STS,構建一個Maven工程,并將Netty的依賴放入pom.xml中。具體實現代碼如下:

Netty的Maven工程構建圖如圖1-1所示。

圖1-1 Netty的Maven工程構建圖

按照服務端程序實現步驟新建一個Netty服務類,具體代碼如下:

服務端還需要編寫一個業務邏輯處理Handler(名稱為ServerHandler),這個Handler需要讀取客戶端數據,并對請求進行業務邏輯處理,最終把響應結果返回給客戶端。ServerHandler需要繼承ChannelInboundHandlerAdapter,它是ChannelInboundHandler的子類,這跟Netty的處理數據流向有關。當NioEventLoop線程從Channel讀取數據時,執行綁定在Channel的ChannelInboundHandler對象上,并執行其channelRead()方法。具體實現代碼如下:

主站蜘蛛池模板: 洞口县| 安阳市| 韶山市| 沂水县| 新晃| 虞城县| 安多县| 石楼县| 桓台县| 安康市| 宣汉县| 郸城县| 泾源县| 永胜县| 盐源县| 六枝特区| 会同县| 孝感市| 清流县| 太谷县| 房产| 城固县| 淳化县| 嘉定区| 合阳县| 通河县| 新龙县| 应城市| 于田县| 吉水县| 宝山区| 营山县| 东平县| 攀枝花市| 洮南市| 开阳县| 香格里拉县| 永安市| 宁波市| 胶南市| 孟津县|