Netty編寫第一個服務端與客戶端應用程式
阿新 • • 發佈:2019-01-25
服務端
所有的 Netty 伺服器都需要以下兩部分
- 至少有一個 ChannelHandler:該遵紀安實現了伺服器對客戶端接受的資料的處理邏輯,即業務邏輯
- 引導(ServerBootStrap):這是配置伺服器的啟動程式碼。它必須繫結到它要監聽的伺服器埠上面
ChannelHandler
一個ChannelHandler類中至少應該包含以下三個方法:
channelRead():對於每個傳入的訊息都要呼叫
channelReadComplete():表示讀取到了當前批量中的最後一條訊息
exceptionCaught():讀取操作期間,出現異常後會被呼叫
具體方法和使用類與Netty版本有關係,本次示例程式碼採用的版本
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>5.0.0.Alpha1</version>
</dependency>
引導(ServerBootStrap)
具體需要做至少兩件事:
- 繫結埠
- 配置 Channel ,以將有關的入站訊息通知給 對應的 ChannelHandler 例項
客戶端
所有的 Netty 客戶端至少包括
- 至少有一個 ChannelHandler:該遵紀安實現了伺服器對客戶端接受的資料的處理邏輯,即業務邏輯
- 引導(BootStrap):這是配置伺服器的啟動程式碼。它必須繫結到它要監聽的伺服器埠上面
ChannelHandler
至少包含下面三個方法:
channelActive():連線建立後將會被呼叫
channelRead():讀取資料
exceptionCaught():異常捕獲
引導(BootStrap)
邏輯和服務端基本一致,主要區別點在於不需要繫結到一個一直被監聽的埠,而是需要用主機的地址和埠引數來連線遠端的地址。
總結
本章節搭建了一個簡單的基於 Netty 的 CS 模式的架構,雖然只是一個簡單的應用程式,但是它可以伸縮到支援數千個併發連線——每秒比普通的基於套接字的 java 應用程式處理多得多的訊息。
下一章我們將對 Netty 體系架構進行概述,以為之後深入全面的學習 Netty 打好基礎。