現有線程分析
每個客戶端都有讀寫兩個線程,加上selector的線程以及轉發、等待連接線程等,可見線程是非常多的。
線程優化後的模型
- 減少線程數量,每個客戶端不再開讀和寫線程,而是開整體的讀線程池和寫線程池。
- ByteBuffer也不再爲每個客戶端都開闢一個,而是使用統一的ByteBuffer。
- 異步線程採用鎖(AtomicBoolean)實現數據同步
運行環境
IDEA
目錄結構
- 多模塊項目
-
lib-clink --工具包
core --核心類包
Connector --客戶端連接類
IoArgs --Buffer封裝類
IoContext --上下文類,統籌
IoProvider --IO方法接口,即數據收發方法接口
Receive --接收接口
Sender --發送接口
utils --基本工具包
ByteUtils --byte數據的工具類
CloseUtils --關閉操作工具類
Impl --方法使用接口包
IoSelectorProvider --IoProvider的實現類
SocketChannelAdapter --數據收發具體實現類
Clink --clink總類
-
sample-client --客戶端
bean --數據格式封裝包
ServerInfo --服務器信息封裝類
Client --客戶端啓動總類
TCPClient --TCP數據發送類
UDPSearcher --UDP搜索類
-
sample-foo --協議包
constants --協議規定包
TCPConstants --TCP協議規定端口等
UDPConstants --UDP協議規定端口等
-
sample-server --服務端
handle
ClientHandler --客戶端線程類
Server --服務器啓動總類
TCPServer --TCP服務端
UDPProvider --UDP接收廣播回送消息類
代碼
註釋也在裏邊了
鏈接: 百度網盤 提取碼: yb3b