2012-05-06 139 views
0

我有一個php服務器與連接到服務器的客戶端陣列.. 有沒有一種方法可以讓我找出每個客戶端連接多長時間,如果客戶端超時時間斷開它?插座被接受的時候,php會保存在什麼地方? 我試圖擺脫鬼客戶端..php套接字超時

我知道我可以設置時間套接字接受自己,並循環扔它,但我的問題,如果有某種類似的socket_get_connection_time()函數類似的東西?

回答

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. 
}