0
我有一個php服務器與連接到服務器的客戶端陣列.. 有沒有一種方法可以讓我找出每個客戶端連接多長時間,如果客戶端超時時間斷開它?插座被接受的時候,php會保存在什麼地方? 我試圖擺脫鬼客戶端..php套接字超時
我知道我可以設置時間套接字接受自己,並循環扔它,但我的問題,如果有某種類似的socket_get_connection_time()函數類似的東西?
我有一個php服務器與連接到服務器的客戶端陣列.. 有沒有一種方法可以讓我找出每個客戶端連接多長時間,如果客戶端超時時間斷開它?插座被接受的時候,php會保存在什麼地方? 我試圖擺脫鬼客戶端..php套接字超時
我知道我可以設置時間套接字接受自己,並循環扔它,但我的問題,如果有某種類似的socket_get_connection_time()函數類似的東西?
如果您使用的是基於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.
}