天天看點

[遊戲開發][網絡篇] Net架構

前言:本篇文章主題Tcp連接配接Socket套接字相關内容,對基礎部分、優化補充部分做了說明,最終目的是讓閱讀者看完本篇文章後能寫一個功能完善的網絡架構。

首先明确一下網絡連接配接的基礎子產品有哪些

這個沒什麼好說的,四個重載接口差別不大

用戶端Socket連接配接後開始接收資料,用戶端接收資料的方式一般有兩種

開線程,為何開線程:資料接收不需要和Mono互動,僅僅是對byte[]資料的操作,開線程提高效率,下面是代碼示例

簡單粗暴的寫在Update裡,如果是架構則應該有tick 接收和發送緩存池的機制,這裡是基礎部分,隻介紹核心代碼

Socket基礎部分外的優化

[補充優化1]發送、接收緩存池

我們可以把發送緩存池和接收緩存池都封裝成一個class,将來資料發送和接收的重任就落到了它倆身上,輸出叫SocketOutputPool,輸入叫SocketInputPool

[補充優化1-發送緩存池]

發送緩存池是幹嘛的?基本原理就是維護一個Byte數組。

當上層業務有資料向伺服器發送時,會調用NetMgr的send函數,send函數再調用SocketOutputPool的Write函數向Byte數組中寫入該資料。

緩存池的資料合适發送,發送多少?當Write函數寫入資料後,應當記錄一下目前資料長度,int變量m_PoolTail記錄尾部長度,上文有過對發送時機的描述,一般來說會在Update中調用發送函數

3、資料發送和資料接收可以寫兩個緩存池

注意事項:

1、Tcp是否需要緩存池,可設定bool變量Nodelay

2:socket.Send()方法的傳回變量int值表示該send向tcp發送緩沖區塞了多少個位元組,并不是向伺服器發送成功了多少個位元組,

3:如果出現發包失敗,tcp底層會自動重發,tcp的底層有發送成功回複機制,另一端收到消息包後會回複一個确認包

繼續閱讀