- Netty源碼剖析與應用
- 劉耀林
- 636字
- 2021-01-05 18:23:45
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()方法。具體實現代碼如下:

- Learning PostgreSQL
- GeoServer Cookbook
- CentOS 7 Server Deployment Cookbook
- MATLAB 2020 從入門到精通
- C語言程序設計
- Mastering Kali Linux for Web Penetration Testing
- Python程序設計案例教程
- Mastering LibGDX Game Development
- 面向對象程序設計(Java版)
- GameMaker Programming By Example
- HDInsight Essentials(Second Edition)
- 區塊鏈技術進階與實戰(第2版)
- QGIS Python Programming Cookbook(Second Edition)
- C# Multithreaded and Parallel Programming
- AV1視頻編解碼標準:原理與算法實現