Workerman集群中work_id唯一性问题。
workerman的集群推送中的案例:https://www.workerman.net/doc/workerman/components/channel-examples.html
案例中描述推送服务器 A 和 B 使用start_ws.php运行在192.168.1.2 和192.168.1.3上。
HTTP发布推送信息的服务X和Y使用start_http.php运行在192.168.1.4 和192.168.1.5上。
从http发送推送服务的时候,只传了work_id和connection_id,并没有标识在哪台服务上。因为worker_id和connection_id的组合并不能保证全局唯一。
假设用户甲连接的是 A,其进程ID work_id=2, 连接ID connection_id=2
用户乙连接的是 B,其进程ID也是 work_id=2, 连接ID connection_id=2
这样我本来是想推送给甲的信息,用户乙也能收到。
请问在集群中,是否有 work_id 唯一性的方案,异或我只能在用户连接上的时候,标识清楚用户连接id、进程id、所属集群的机器id。
每个协程id在当前worker中是唯一的;
worker对应进程,每个pid在当前pod中就是唯一的;
每个集群的pod都有对应标识,在其集群中就是唯一的;
每个集群对应有标识或者内网地址或者公网地址,在所有集群服务中也是唯一的;
将其结合,就是唯一的
赞赞赞👍🏻👍🏻👍🏻
🐂🐸
找到官方的解决方案了,GatewayWorker中的client_id,就是为每个连接准备的唯一ID。
https://www.workerman.net/doc/gateway-worker/client_id.html