我一直在看这个一个小时左右没有真正的运气。
运行PHP 5.4.45(不要说,我知道)。
在生产实例中,我发现套接字连接会在5秒后定期失败并超时。我们已经确认我们连接的API有时可能需要10秒才能为某些请求生成响应。
这不会一直发生,因此我们正在考虑增加超时以帮助调试问题。
套接字定义为
$address = 'tcp://example.com:80';
$flags = STREAM_CLIENT_ASYNC_CONNECT;
$context = stream_context_create();
$socket = stream_socket_client($address, $errNr, $errMsg, 0, $flags, $context);
为了测试连接超时,我尝试将以下设置为极低的超时,以便我可以触发错误并验证增加超时
$address = 'tcp://example.com:80';
$flags = STREAM_CLIENT_ASYNC_CONNECT;
$context = stream_context_create();
$socket = stream_socket_client($address, $errNr, $errMsg, 0, $flags, $context);
stream_set_timeout($this->_socket, 0, 40);
然而它正如以前一样工作,如果40微秒的超时已正确应用,那么我原本期望套接字超时错误在本地发生,因为API在该时间范围内无法响应。
任何人都可以帮我解决如何正确配置异步套接字的超时问题吗?
或者当前超时它显然从某个地方得到5秒,但我不知道php.ini中default_socket_timeout
当前设置为60
的位置。
或者,如果我的测试方法是假的(我怀疑它可能是),请指出一种更好的方法来验证此超时错误。