php套接字超时

时间:2012-05-06 15:54:57

标签: php sockets

我有一个php服务器,其中包含一组连接到服务器的客户端.. 有没有办法让我找出每个客户端连接多长时间以及客户端是否通过超时时间断开连接?在接受套接字的时候,php会在某处保存吗? 我试图摆脱幽灵客户..

我知道我可以设置套接字接受自己的时间并循环抛出但是我的问题是否存在某种类似的socket_get_connection_time()函数?

1 个答案:

答案 0 :(得分:0)

处理此问题的一种方法是使用信号,如果您使用的是基于Unix的平台(我不认为这在Windows上可用)。

首先,您需要确保您的PHP构建包含pcntl_ *函数。请参阅此处的文档: http://php.net/manual/en/book.pcntl.php在许多安装中,默认情况下不会编译它。

你会做这样的事情:

if( !function_exists( "pcntl_signal" ) ) {
    die("pcntl_* functions not available");
}

pcntl_signal( 14, "cleanup", TRUE ); // 14 is the value for the SIGALARM unix signal
pcntl_alarm( XXXX ); // where XXXX is the number of second timeout for doing maintenance

function cleanup()
{
   // do your checks for timed out sockets here.
   // you will need some way to access the data, possibly a global variable pointing to
   // to the list of socket connections.
}