使用GatewayClient获取所有在线客户端(getAllClientSessions)的时候,返回的总是空数据(GatewayClient跟worker不在同一个服务器,使用了Gateway::$registerAddress设置公网ip,并且是可以连通的),看了下代码,发现getAllGatewayAddressesFromRegister这个函数里面返回的地址全部都是"127.0.0.1:端口"这样的地址,也就是里面有这么一段代码:
$client = stream_socket_client('tcp://' . self::$registerAddress, $errno, $errmsg, self::$connectTimeout);
if (!$client) {
throw new Exception('Can not connect to tcp://' . self::$registerAddress . ' ' . $errmsg);
}
fwrite($client, '{"event":"worker_connect","secret_key":"' . self::$secretKey . '"}' . "\n");
stream_set_timeout($client, 1);
$ret = fgets($client, 655350);
这个返回的是{"event":"broadcast_addresses","addresses":}这种,那我就测试了下,在GatewayClient本机上面启动另外一个worker,发现getAllClientSessions取到的竟然是本机的socket客户端,也就是说Gateway::$registerAddress不管设置了172.0.0.1还是设置的公网服务器ip,getAllClientSessions返回的都是本机上面的worker客户端信息
问题总结:Gateway::$registerAddress设置公网服务器的情况下,getAllClientSessions函数获取到的是当前服务器的客户端信息,无法获取目标ip的worker服务器的客户端信息。
摘自手册 http://doc2.workerman.net/326149
啊!!!!registerAddress和lanIp搞混了