網關服務相關代碼 watch_dog gate agent gateserver
啓動:
1.啓動watch_dog服務,watch_dog 啓動 gate服務。
2.執行watch_dog start 服務,向其傳入conf。watch_dog 通知 gate 執行open 命令傳入conf。gate 開始lisent。
接受客戶端連接:
1.gate 收到新的連接,通知watch_dog.
2.watch_dog啓動一個agent 服務,調用 agent start,傳入gate , client , watchdog
3.agent 通知 gate執行forward,建立agent 和 connect的映射(gate收到client的數據可以通過這個映射直接轉發到agent)
接受客戶端數據:
gate 接受到數據,如果connect 有agent,那麼直接redirect消息到agent。如果沒有agent send(tostring(msg))到watch_dog
客戶端關閉連接:
1.gate收到斷開連接,清除connnect數據。unforward接觸agent 和 connect的映射。發送close消息到watch_dog
2.watch_dog通知gate kick,通知agent disconnect
3.gate 收到kick,close(fd)
4.agent收到disconnect,exit server
總結:
watchdog主要負責gate的創建,agent的創建與退出。
gate主要負責的是client連接創建與斷開以及接受到消息轉發給agent。
agent主要負責接受gate轉發的請求,發送心跳,處理業務,然後直接把應答發送給client。
watchdog,gate可以直接使用,agent我們需要定義自己的包體的解析和打包,以及收到消息包的分發處理。
注意:skynet自帶的網關服務,是以大端進行編碼。前兩個字節爲包體長度。只要符合這種編碼格式,就可以使用網關的編碼和解碼。網關自帶了缺包和粘包的處理在netpack.filter中。
在agent中收到的msg和sz是包體的數據,去除了兩個字節的包體長度。
下一篇將介紹protobuf的接入,自定義agent的封包,解包,消息的分發處理。