如何使用stream_socket_client和STREAM_CLIENT_ASYNC_CONNECT

时间:2017-01-11 16:47:24

标签: php sockets asynchronous timeout asyncsocket

我一直在看这个一个小时左右没有真正的运气。

运行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的位置。

或者,如果我的测试方法是假的(我怀疑它可能是),请指出一种更好的方法来验证此超时错误。

0 个答案:

没有答案