1)編碼
消息長度(short int-->2個字節) + 消息編號(short int--》2個字節) + 消息體
2)Protobuf協議文檔
(1)syntax="proto3";
(2)命名格式
XxxCmd: UserEntryCmd
XxxResult: UserEntryResult
(3)定義
enum {
}
message xxx {
}
(4)根據定義,使用工具包導出(去protobuf官網 protoc-3.11.1-win64/bin/protoc.exe)
protoc.exe --java_out=${目標目錄} .\GameMsgProtocol.proto
(5)報錯是因爲: 沒有引入proto包
3)解碼器
根據命令號,解碼後,fireChannelRead到下一個流程
4)字節數組
web則是thttp協議
5)粘包
消息包太大的話,會分多次發送--》跟淘寶上一下子買了很多東西,會打成很多個包裹。
6)將2個數值轉化爲1個短整型:
byte a = (byte)1;
byte b = (byte)2;
short i = (short)(a << 8 | b);
7)佔位符
切換爲TCP Socket的話,就需要自己寫入長度。因此用了佔位符。
8)消息編號(MsgCode) + 消息體
9)能接到消息後,誰也看不到誰。
說明服務器只是收消息了,沒有回消息(沒有廣播)。
因此用戶入場後,我們需要把消息廣播出去: 誰進來了,長啥樣。
10)ChannelGroup: 必須用static修飾,因爲要羣發,所以所有的人需要共用一個。
11)構建起模式: Builder
12)'進入請求' + '進入請求'返回
'周圍有什麼人'請求 + '周圍有什麼人'返回。
13)客戶端發到服務器--》將字節數組變爲對象。(解碼器: Inbound)
服務器把數據發送給客戶端--》對象變爲字節數組。(編碼器: 出站Outbound)
14)新的用戶進來後,沒有發: 當前誰在場