请问worker,bussinessworker是如何实现和gataway进程通讯的

awesome1tang

我查看源码,没有找到bussworker监听的端口,除了一个异步通讯,文笔菜

2897 5 0
5个回答

phpcreeper

1、首先 BusinesWorker 是不监听端口的,主要用于接收Gateway转发过来的事件以及数据,并默认调用Events.php中的onXXX来处理业务逻辑。
2、Gateway和 BusinesWorker 进程通讯原理【摘自手册】:
(1) Register、Gateway、BusinessWorker进程启动
(2) Gateway、BusinessWorker进程启动后向Register服务进程发起长连接注册自己
(3) Register服务收到Gateway的注册后,把所有Gateway的通讯地址保存在内存中
(4) Register服务收到BusinessWorker的注册后,把内存中所有的Gateway的通讯地址发给BusinessWorker
(5) BusinessWorker进程得到所有的Gateway内部通讯地址后尝试连接Gateway

  • 暂无评论
awesome1tang

接受数据就得连接gataway,那gataway返回bussiness数据不需要根据bussiness的地址及端口发包嘛,bussiness也需要自己的端口的吧

  • phpcreeper 2019-03-28

    gateway开启对外地址的同时,会同时开启内部监听端口,所谓的 $gateway->lanIp,bussiness不需要自己的端口,bussiness连接的是$gateway->lanIp来通信的。

awesome1tang

还是不太理解,bussiness没有自己的端口是如何收到包的

  • phpcreeper 2019-03-29

    我说不需要自己的端口是指不需要监听服务端口,bussiness在gatewayworker中充当的是个客户端的角色,通过 AsyncTcpConnection 对 gateway 发起异步socket连接,这里bussiness自然就存在一个本机随机分配的通信端口。

  • awesome1tang 2019-03-29

    懂了,谢谢大佬了

awesome1tang

awesome1tang

timer定时器是判断时间戳的形式实现的吧

  • 暂无评论
年代过于久远,无法发表回答
×
🔝