pomelo 服務器之間的通信

master服務器在啓動的時候會啓動mater服務,生成一個MasterAgent,作爲中心服務器。

然後所有服務器,包括mater服務器,都會啓動monitor服務,生成一個MonitorAgent,作爲與中心服務器通信的客戶端;


中心服務器,會監聽所有服務器MonitorAgent的連接,首先收到connection消息,生成客戶端socket,並監聽一系列的消息


組件monitor在啓動的時候,會首先啓動ConsoleService,作爲客戶端的ConsoleService會調用MonitorAgent的connect函數,並會調用socketio的connect函數進行對中心服務器的連接,生成的socket綁定connect消息,在連接成功時候,客戶端服務器就會發送register消息


MasterAgent在接收register消息的時候,會調用doAuthServer,驗證成功,會發給MonitorAgent客戶端register成功的消息,同時MasterAgent也會發送register消息,ConsoleService會接收MasterAgent發送的消息,而materserver在start的時候,有加載一些模塊,其中有__watchdog__,會接收ConsoleService的register的消息,調用onServerAdd函數,會執行函數this.notify({action: 'addServer', server: server});通知所有已經註冊的server,當前又有新的服務器加入。


MonitorAgent收到register成功,設置標誌位,並且觸發當初ConsoleService的start函數傳入的回調函數,這時候,會啓動模塊__watchdog__,非中心服務器,會調用subscribeRequest(this, this.service.agent, this.id, cb);向中心服務器獲取已經註冊的服務器服務器列表


MasterAgent收到訂閱請求,會轉發給MasterAgent以monitor消息形式進行處理,運行函數self.consoleService.execute(msg.moduleId, 'masterHandler', msg.body, function(err, res)),即調用__watchdog__的masterHandler函數進行處理訂閱信息,把客戶端加入訂閱列表中,當有新的服務器加入的時候,會進行通知。並把當前所有服務器列表,傳入回調函數,通過socket.emit('monitor', resp)函數,把所有服務器,通知給訂閱服務器


MonitorAgent收到monitor消息的時候,根據respid從callbacks中獲取回調函數,即當初請求訂閱時候傳入的回調函數,在subscribeRequest中,回調函數調用addServers,通過app的addServers函數,把獲取的服務器列表存入serverTypeMaps中,同時app會發送ADD_SERVERS消息,在組件proxy中會觸發addServers函數,生成對每個服務器遠程調用的代理。生成代理的時候,要求服務器要配置端口port,否則無法調用rpc


而其他服務器收到addServer事件的時候,以爲不存在respid,所以會調用__watchdog__的monitorHandler函數,最終聽上會調用app的addServers函數


至此,單個服務器啓動,所觸發的訂閱操作,以及若通知其他服務器新的服務器加入的操作就完成了






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