netty 之 telnet HelloWorld 詳解
依賴工具
原始碼拉取
從官方倉庫 ofollow,noindex" target="_blank">https://github.com/netty/netty Fork
出屬於自己的倉庫。為什麼要 Fork
?既然開始閱讀、除錯原始碼,我們可能會寫一些註釋,有了自己的倉庫,可以進行自由的提交。:smiling_imp:
使用 IntelliJ IDEA
從 Fork
出來的倉庫拉取程式碼。
本文使用的 Netty 版本為 4.1.26.Final-SNAPSHOT
。
Maven Profile
開啟 IDEA 的 Maven Projects ,選擇對應的 Profiles 。如下圖所示:
-
jdk8
:筆者使用的 JDK 版本是 8 ,所以勾選了jdk8
。如果錯誤的選擇,可能會報如下錯誤:java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer
-
linux
: 選擇對應的系統版本。:smiling_imp: 筆者手頭沒有 windows 的電腦,所以不知道該怎麼選。
修改完成後,點選左上角的【重新整理】按鈕,進行依賴下載,耐心等待...
解決依賴報錯
在 codec-redis
模組中,類 FixedRedisMessagePool 會報如下類不存在的問題:
import io.netty.util.collection.LongObjectHashMap; import io.netty.util.collection.LongObjectMap;
-
具體如下圖所示:
解決方式如下:
cd common; mvn clean compile;
-
跳轉到
common
模組中,編譯生成對應的類。為什麼可以通過編譯生成對應的類呢,原因參見common
模組的src/java/templates/io/netty/util/collection
目錄下的.template
檔案。
在 Github 上,也有多個針對這個情況討論的 issue :
-
《Can not find class io.netty.util.collection.LongObjectHashMap in 4.1.8.final》
-
《io.netty.util.collection.LongObjectHashMap not found at branch 4.1》
example 模組
在 example
模組裡,官網提供了多個 Netty 的使用示例。 本文以 telnet
包下來作為示例。哈哈哈,因為最簡單且完整。
netty-helloworld
使用說明
軟體架構說明
-
使用netty實現客戶端<-->伺服器通訊
專案結構
netty-helloworld ├── client ├── Client.class -- 客戶端啟動類 ├── ClientHandler.class -- 客戶端邏輯處理類 ├── ClientHandler.class -- 客戶端初始化類 ├── server ├── Server.class -- 服務端啟動類 ├── ServerHandler -- 服務端邏輯處理類 ├── ServerInitializer -- 服務端初始化類
使用telnet與服務端進行互動
-
專案找到com.sanshengshui.netty.server.Server類,右鍵debug as啟動SocketServer
-
開啟telnet,和服務端進行互動操作
客戶端與服務端互動
-
專案找到com.sanshengshui.netty.server.Server類,右鍵debug as啟動Server
-
專案找到com.sanshengshui.netty.client.Client類,右鍵debug as啟動Client
演示如下:
結果也如上述所說!
其它
關於netty 之 telnet HelloWorld 詳解到這裡就結束了。
netty 之 telnet HelloWorld 詳解專案工程地址: https://github.com/sanshengshui/netty-learning-example/tree/master/netty-helloworld
對了,也有不使用springBoot整合的Netty專案工程地址:
https://github.com/sanshengshui/netty-learning-example
原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力!
版權宣告:
作者:穆書偉
部落格園出處:https://www.cnblogs.com/sanshengshui
github出處:https://github.com/sanshengshui
個人部落格出處:https://sanshengshui.github.io/