我想学习下gataway?

bobshipwood

问题描述

如下是关于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进程共享这些链接?

为此你搜索到了哪些方案及不适用的原因

没有

285 3 0
3个回答

北月妖王

client_id 是怎么来的,搞明白这一点,你这个问题就有答案了。

public static function addressToClientId($local_ip, $local_port, $connection_id)

public static function clientIdToAddress($client_id)

这就是为什么文档中关于 $client_id 是这么描述的:

client_id固定为20个字符的字符串,用来全局标记一个socket连接,每个客户端连接都会被分配一个全局唯一的client_id。

如果client_id对应的客户端连接断开了,那么这个client_id也就失效了。当这个客户端再次连接到Gateway时,将会获得一个新的client_id。也就是说client_id和客户端的socket连接生命周期是一致的。

client_id一旦被使用过,将不会被再次使用,也就是说client_id是不会重复的,即使分布式部署也不会重复。

lsmir2

https://www.workerman.net/doc/gateway-worker/business-worker.html
1.BusinessWorker是运行业务逻辑的进程,BusinessWorker收到Gateway转发来的事件及请求时会默认调用Events.php中的onConnect onMessage onClose方法处理事件及数据,开发者正是通过实现这些回调控制业务及流程。

  1. client_id固定为20个字符的字符串,用来全局标记一个socket连接,每个客户端连接都会被分配一个全局唯一的client_id。
    如果client_id对应的客户端连接断开了,那么这个client_id也就失效了。当这个客户端再次连接到Gateway时,将会获得一个新的client_id。也就是说client_id和客户端的socket连接生命周期是一致的。
  • 暂无评论
kof21411

1,gateway是接客,Register代理分流,BusinessWorker处理逻辑
2,因为gateway和BusinessWorker之间有Register,所以client之间通讯由Register转发

  • 暂无评论
🔝