unity-tcp網絡線程到主線程消息隊列的分發

1)筆記

1)消息隊列的分發: 網絡線程接收到數據後要丟給主線程,因此需要做一個消息隊列.

2)收數據的線程收到數據後,發到消息隊列. 主線程每次update刷新的時候,判斷消息隊列是否有消息,
  有則依次處理;

3)用戶層面,只需要監聽即可;

4)監聽分爲:stype和ctype,表示監聽哪個服務的那個消息, AddListener即可;

5)事件隊列的結構:
  (1)網絡接收線程,將收到的網絡數據 push網絡事件到事件隊尾
  (2)unity主線程pop網絡事件的隊列頭,把事件拿出來
  (3)這2個線程採用 同步鎖 做好線程同步;
  (4)事件隊列裏面就有: 事件1,事件2,事件3...

6)net_manager
  (1)_instance成員方便其它地方調用
  (2)注意:由於是DontOnDestroy,因此本身就是單例,直接在onAwake中賦值this給這個變量即可
  (3)繼承自MonoBehaviour,因此屬於unity主線程,同時又創造出來一個網絡接收線程

7)遊戲退出時,網絡線程退出不完全,因此需要編寫: 遊戲app退出的監聽事件做清理: 關閉客戶端連接;

8)每一個客戶端斷線時,每一個service都會調用on_session_disconnect
  (1)客戶端的ip port通過get_address接口獲得

9)由於網絡線程(收數據函數中) 和 主線程(Update函數中)都要訪問事件隊列,因此需要lock一下

10)網絡 事件管理模塊: 取出來的消息發給事件監聽者:
  (1)stype-->對應一個監聽者(回調函數),如:監聽 大廳的服務、監聽登錄的服務、監聽auth服務 等...
  (2)stype 回調函數

11)c#第一次註冊和第二次註冊的不同

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章