2011-01-26 27 views
2

我想不出一個更好的方式來標題,抱歉。如何讓我的腳本不斷檢查一個變量?

我正在研究PHP IRC bot。目前,我正在使用一個while fgets(...循環來保持它監聽數據和響應。

在我睡着的某個時候,它實際上「停止」並停止獲取數據,沒有任何可用於觸發重新啓動的錯誤消息。

我想到了一個快速解決方案,那就是存儲服務器最後一次抓住機器人,如果超過x秒,重新連接。這個計劃在理論上非常有用,除了這個ping檢查是在fgets循環內完成的,所以它只在它從IRC服務器接收到數據時才進行檢查。因此,如果它只是停止從服務器獲取數據,它將不會比較ping時間,並且不會重新啓動。

我想不出如何解決這個問題。幫幫我?

+0

我建議創建一個守護進程,以便在後臺運行並等待消息:http://www.google.com/search?hl=zh-CN&safe=active&q=php+daemon+&aq=f&aqi=&aql=&oq= – 2011-01-26 16:00:27

+0

爲什麼不這樣做'正確的方式',並用乒乓迴應ping? (或任何其在IRC RFC中調用的) – Kevin 2011-01-26 16:01:08

回答

3

首先,使用stream_set_timeout()將(已打開的)套接字的超時設置爲低於服務器ping超時的值。

然後修改循環條件爲:while(fgets(...) || !$done) 當您沒有得到答案時,fgets將超時,您可能必須爲此禁止警告。但是,通過這種方式,您可以將某些內容發送到服務器,以便在發生ping超時之前它不會斷開與您的連接。只要修改$ done標誌並將其設置爲true,當您確實要斷開連接(但是您正在這樣做)。

不知道這是否有效,但它可能值得一試。

附錄:我在考慮退出條件,最好是手動退出while(使用break)而不是設置標誌。所以你可以修改條件到​​。否則,當服務器不斷髮送內容時,您可能會陷入無限循環。

相關問題