主要分為四部分: 一、套接字管理器(SocketManager.cs) 1)、連接 2)、斷開 3)、接收(線程) 4)、發(fā)送(攜程) 1.發(fā)送消息基本方法 2.二進制方式發(fā)送 3.protobuf方式發(fā)送 二、消息中心:(MessageCenter.cs) 1)、游戲邏輯事件 2)、網(wǎng)絡數(shù)據(jù)事件(線程) 三、數(shù)據(jù)封裝: 1)、網(wǎng)絡數(shù)據(jù)緩沖器(DataBuff.cs)自動Size a.參數(shù)定義: 2.添加數(shù)據(jù)到緩存中 3.從緩存中取出一條完整數(shù)據(jù) 2)、二進制字節(jié)流(ByteStreamBuff.cs) 要將這些數(shù)據(jù)傳給服務器,怎么變成byte[]數(shù)組呢?這里就要做一個數(shù)據(jù)封裝。所有數(shù)據(jù)都是可以變成byte或byte[]來表示,要做的其實就是把這些數(shù)據(jù)拼成一個byte[]。 一般都是,順序存,順序取。如: 讀取: 這里已經(jīng)對SendMsg做的重載,故直接傳入,ByteStreamBuff或者,protobuf數(shù)據(jù)即可,SocketManager在發(fā)送前會轉(zhuǎn)換為Byte[],再發(fā)送出去。 很多對數(shù)據(jù)的二進制封裝的方法都是用byte[] 來做緩存媒介,所以在沒事new 的時候,都要先給這個數(shù)據(jù)封裝器,定一個大小,為了省事,所以這里用Stream作用緩存媒介。還有就是在封裝器中有一個flip()函數(shù),這里要再說一下,就是系統(tǒng)的大小端問題,如果前端是大端系統(tǒng),后端是小端系統(tǒng)在數(shù)據(jù)交互的時候就會出問題了。細節(jié)就不解釋了,百度(系統(tǒng)大小端)就可以了,不難理解的。3)、谷歌ProtoBuffer序列化 a.現(xiàn)在手游這個用的很火。方便快捷,壓縮效率也要。主要就是兩個函數(shù),序列化,反序列化。這個兩方法封閉在SocketManager.cs中。 b.序列化 c.反序列化 四、簡單流程圖
|
|
來自: 郭恩 > 《網(wǎng)絡編程》