遊戲中tcp訊息使用byte位元組陣列傳輸
通訊訊息不像是web那樣直接使用文字,比較多的形式使用位元組byte進行傳輸,形如下面的形式
0,1, 0,2 ,0,0,0,8, 0,0,1,1 ,0,0,0,3
根據客戶端與服務端定義的協議,去讀取byte陣列,
比如定好訊息格式為
訊息號+狀態碼+內容長度+內容
(messageId+statusCode+length+body)
(short+short+int+byte[])
基本型別位元組所佔的長度
boolean 1
short 2
int 4
float 4
long 8
所以按照這種訊息格式,我們可以去解析上面的訊息例子
訊息號為 0,1,轉為short就是 1
狀態碼為 0,2,轉為short就是 2
長度為 0,0,0,8,轉為int就是 8
根據長度,就可以得知內容body的長度為8,所以就是一個byte[8]的陣列,後面就是0,0,1,1 ,0,0,0,3,這個假設是2個int,轉出來的值就是257,3
然後看下這幾個引數
訊息號:web裡面對不同的網址進行了區分,然後根據後面所加的內容進行查詢,比如http://127.0.0.1:8088/projectname/index?pcmd=aaa、這樣能根據index或者pcmd找到對應的方法進行呼叫。
但是在tcp協議中沒有這樣的網址,一般我們只是暴露出個埠和ip,所以我們只能在訊息中新增一個訊息號,根據訊息號的不同進行不同的操作。
狀態碼:在web專案中,我們會有404(找不到頁面),403(許可權不對)相關的狀態碼,我們這邊也是這麼加的,
我們就可以提前定一個狀態碼--未登入,比如900。比如玩家需要操作一個數據,但是他已經掉線了,這時候就返回這個狀態碼給他,跟在訊息號後面
內容及長度,內容是我們具體要傳送的東西,假設上面的例子是要傳送 玩家id和玩家金幣(順序定死),那麼玩家id就是257,金幣值就是3