Workerman集群中work_id唯一性问题

问题描述

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。

171 2 2
2个回答

chaz6chez

每个协程id在当前worker中是唯一的;
worker对应进程,每个pid在当前pod中就是唯一的;
每个集群的pod都有对应标识,在其集群中就是唯一的;
每个集群对应有标识或者内网地址或者公网地址,在所有集群服务中也是唯一的;

将其结合,就是唯一的

今天不抽烟

找到官方的解决方案了,GatewayWorker中的client_id,就是为每个连接准备的唯一ID。
https://www.workerman.net/doc/gateway-worker/client_id.html

  • 暂无评论
×
🔝