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#第一次註冊和第二次註冊的不同