網絡協議

在作客戶端與服務器通訊以前,先約定消息包的格式,例如:整個包的長度+消息類型+消息體數據內容html

爲何發送的每條消息數據前面要加個長度的字段?
TCP的協議中,包的接收順序就是包發送時候的順序, 你收到的時候先將長度這個字段解析出來,而後讀入接下來的data內容,
粘包:若是data內容過長(大於這個包的長度),那多是幾個包粘在一起了,只讀入當前包的內容。
斷包:若是不足(小於這個包的長度),證實出現斷包的狀況,緩存下來,等下次收到包的時候,確定顯示上次收到包的內容了,拼在一起解出來。 git

那麼就得把消息包轉化成byte[],而後發出給服務器。服務器接收,而後解析。注意字節序(大端,小端)的問題github

你能夠自定義結構體,而後裏面每一個類型都去轉成字節數組。那太蛋疼,直接拋棄~!json

Json,天然是能夠的,只是數據量大,浪費帶寬。弱聯網徹底能夠用的,強交互的天然不用咯。
自動化的工具的話,能夠看個人另外一篇文章:Excel轉Json,Json轉CSharp
unity客戶端用LitJson,支持多層嵌套,以前IOS會報JIT錯,如今好像不會了。
LitJson能夠直接把一個類的對象轉成json字符串,而後咱們再把字符串轉成字節數組,發出去。
接受的話,把字節數組先轉成json字符串,而後再轉爲一個類對象。
Java服務器的話,能夠用Alibaba的FastJson。數組

protobuf(google)傳送門:https://github.com/google/protobuf
優勢就是:一份消息協議.proto文件,而後用工具自動化生成多平臺的消息結構,減小了重複大量工做量和人爲出錯。
unity客戶端的話,由於官方沒有提供.net版本,因此用protobuf-net(第三方)傳送門:https://github.com/mgravell/protobuf-net緩存

關於protobuf_lua_gen,pbc,sproto
請參考:http://bbs.ulua.org/article/ngui/simpleframework_base4.html
或者直接去雲風的blog找去服務器

相關文章
相關標籤/搜索