• 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函数


    至此,单个服务器启动,所触发的订阅操作,以及若通知其他服务器新的服务器加入的操作就完成了






  • 相关阅读:
    DRF 分页
    DRF 权限 频率
    DRF 版本 认证
    opencl(6)读写传输命令、内存映射命令
    opencl(5)缓存对象
    opencl(4)命令队列
    opencl(3)程序、内核
    opencl(2)平台、设备、上下文的获取与信息获取
    epoll
    unsigned 变量名:n
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3476290.html
Copyright © 2020-2023  润新知