2011-08-10 45 views
1

所以我有一個websocket服務器設置和運行在PHP(CodeIgniter是確切的,但這應該不重要...)。我想要做的是讓服務器每隔n秒運行一次「清理」功能,儘可能不使用CRON作業。基本上,我希望已經運行的websocket服務器函數檢查用戶在x時間內沒有做任何事情,並通過關閉它們的套接字來自動「踢」它們。執行服務器操作Wihout用戶輸入Websocket

從我見過的所有網站上,執行服務器動作的唯一途徑就是一旦收到用戶輸入...有沒有一種方法來自動運行一個服務器功能......

想法?

謝謝!

+0

「有服務器運行」清理「功能每隔n秒使用CRON作業「......就像是說,我想開車釘,但我不想用錘子...... – jondavidjohn

+0

@jondavidjohn,以什麼方式? – Brad

+0

@Brad此任務的工具是顯而易見的,爲什麼不使用它? – jondavidjohn

回答

1

可能最好的方法是實現一個守護進程。

這裏是一個教程和一個偉大的階級,讓你開始:http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/

我使用這個類在做類似的任務數的守護進程。他們跑了幾個星期,我沒有任何麻煩。儘管你的內存使用情況需要記住。例如,確保沒有任何匿名函數永遠不會被垃圾收集器殺死。

0

我不知道關於你的「socketserver」的任何信息,但它聽起來像是用java編寫的服務器,或者類似的東西,我假設你自己寫了它(或者至少有源代碼)。你可以做的是開始一個線程運行類似於以下內容(這是寫在PHP中,因爲我不知道Java非常好)

while(true) { 
$oldTime = time(); 
while(time()-$oldTime < 10) continue; 
clean(); 
up(); 
functions(); 
} 
+0

服務器是用PHP編寫的,其中有一個非常類似的while(true)循環,但是它處理更改的套接字(又名新數據,新連接,斷開連接等)。我想要發生的事情是讓服務器運行功能,而沒有任何東西進來,因爲沒有「ping」發送到服務器。這是否意味着零? – SocketN00b

+0

你爲什麼要在php中寫一個服務器?如果我明白你說的是什麼,當想要在沒有檢測到流量時運行這些功能,可能是這樣的: while(true){(check_for_connections()){ functions(); } } –

相關問題