使用GatewayClient獲取所有在線客戶端(getAllClientSessions)的時候,返回的總是空數(shù)據(jù)(GatewayClient跟worker不在同一個服務(wù)器,使用了Gateway::$registerAddress設(shè)置公網(wǎng)ip,并且是可以連通的),看了下代碼,發(fā)現(xiàn)getAllGatewayAddressesFromRegister這個函數(shù)里面返回的地址全部都是"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,發(fā)現(xiàn)getAllClientSessions取到的竟然是本機的socket客戶端,也就是說Gateway::$registerAddress不管設(shè)置了172.0.0.1還是設(shè)置的公網(wǎng)服務(wù)器ip,getAllClientSessions返回的都是本機上面的worker客戶端信息
問題總結(jié):Gateway::$registerAddress設(shè)置公網(wǎng)服務(wù)器的情況下,getAllClientSessions函數(shù)獲取到的是當(dāng)前服務(wù)器的客戶端信息,無法獲取目標(biāo)ip的worker服務(wù)器的客戶端信息。