如下是关于gataway的介绍,
https://www.workerman.net/doc/gateway-worker/principle.html
我的问题是:
1 business进程拿到gateway进程的链接后,就建立链接,我的理解是建立一个tcp的长链接。gateway是tcp的服务端,business是tcp的客户端,我的理解正确吗?
2 client1和client7是怎么通讯的?假设client7发一条数据,“worker进程3”处理,问题是,"worker3进程"怎么知道“gataway1"有client1的客户端链接? 难道gateway本身是把所有的客户端链接放在内存中,然后做到gataway进程共享这些链接?
没有
client_id
是怎么来的,搞明白这一点,你这个问题就有答案了。public static function addressToClientId($local_ip, $local_port, $connection_id)
public static function clientIdToAddress($client_id)
这就是为什么文档中关于
$client_id
是这么描述的:我看了这两个函数只是pack和unpack啊,只是说明了client_id 是由local_ip,local _port,和connection_id组成的啊。
但我不知道这个$conection_id是怎么来的 ?
建议你完整阅读一遍 workerman 的文档,不然你直接上手 gatewayworker 会遇到各种问题。
https://www.workerman.net/doc/workerman/worker/connections.html
https://www.workerman.net/doc/workerman/tcp-connection/id.html
https://www.workerman.net/doc/gateway-worker/business-worker.html
1.BusinessWorker是运行业务逻辑的进程,BusinessWorker收到Gateway转发来的事件及请求时会默认调用Events.php中的onConnect onMessage onClose方法处理事件及数据,开发者正是通过实现这些回调控制业务及流程。
如果client_id对应的客户端连接断开了,那么这个client_id也就失效了。当这个客户端再次连接到Gateway时,将会获得一个新的client_id。也就是说client_id和客户端的socket连接生命周期是一致的。
1,gateway是接客,Register代理分流,BusinessWorker处理逻辑
2,因为gateway和BusinessWorker之间有Register,所以client之间通讯由Register转发