我创建了一个小应用程序来分析网络连接。它从浏览器运行并连接到本地PHP / Apache服务器。然后它要求PHP通过原始套接字发送ping数据包。问题是,如果我尝试ping的主机不活动或不响应ping,我们永远不会从服务器得到答案。
我认为套接字请求一直存在,直到apache重新启动。我最近从我的应用程序得到了混合的结果,我指责使用太多套接字的apache。目前我已经设置了AJAX调用的超时,我很高兴。但我真的需要让PHP做超时时间,以便我不会有500,000个套接字打开一个无法访问的主机。
一些示例代码:
$sockconn = @socket_connect($socket, $target, null);
if(!$sockconn)
{
$raw['error'] = socket_strerror(socket_last_error());
$raw['status'] = false;
return $raw;
}
这是不会超时的功能。我需要让它超时。 PHP脚本执行时间也不会影响套接字。
我无能为力。
答案 0 :(得分:11)
您可以使用以下options:
设置阅读和发送的超时时间socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 1, 'usec' => 0));
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 1, 'usec' => 0));
或者,您可以使用non-blocking sockets并定期轮询套接字以查看远程主机是否响应。
答案 1 :(得分:0)