昨天测试 官方 Gateway client 总是间歇性连接失败抛异常;
getAllGatewayAddressesFromRegister fail. tcp://10.1.1.103:1236 return false
stream_set_timeout($client, 0.1);
$ret = fgets($client, 655350);
// var_dump($ret);
if (!$ret || !$data = json_decode(trim($ret), true)) {
// die("can not connect to getAllGatewayAddressesFromRegister");
print_r('getAllGatewayAddressesFromRegister fail. tcp://' .
self::$registerAddress . ' return ' . var_export($ret, true));
}
$last_update = $time_now;
$addresses_cache = $data['addresses'];
}
return $addresses_cache;
}
}
/**
* 上下文 包含当前用户uid, 内部通信local_ip local_port socket_id ,以及客户端client_ip client_port
*/
解决方案:
搜索 protected static function getAllGatewayAddressesFromRegister()
将
$expiration_time = 1;
改为
$expiration_time = 3;
stream_set_timeout($client, 1);
改为
stream_set_timeout($client, 3);
问题解决!
主要是因为stream_socket_client 的超时时间设置过短,过早的断开了连接