2011-11-16 60 views
0

嘿傢伙我正在做一個網站,你提交一個服務器的廣告。當用戶進入到我的網站的索引頁它抓住提交的所有服務器的IP的,然後測試,看它是否是在網上使用fsockopen()像這樣:PHP:最有效的方法來使多個fsockopen();連接?

while($row = mysql_fetch_assoc($rs)) { 

    $ip = $row['ip']; 

    $info = @fsockopen($ip, 25565, $errno, $errstr, 0.5); 

    if($info) { 
    $status = "<div><img width='32px' height='32px' 
      title='$name is online!' src='images/online.png'/></div>"; 

    $online = true; 

    } else { 

    $status = "<div><img width='32px' height='32px' 
      title='$name is offline!' src='images/offline.png'/></div>"; 

    $online = false; 
    } 

} 

} 

這種方式工作得很好,但唯一的缺點是當你加載網站時,由於調用了fsockopen()方法,需要2-4秒才能開始加載網站。我想知道是否有更好的方法可以減少網站加載之前的等待時間。

任何信息將不勝感激,謝謝。

回答

1

例如,如果上次檢查時間超過15分鐘,請將在線狀態和上次檢查時間存儲在數據庫中,然後進行更新。我很肯定你不需要獲得每個頁面加載的狀態?這是連接到每臺服務器所需的時間,這會降低網站的速度。

然後,您可能會想要將更新過程移至cronjob,而不是依賴訪問您的網站的人來更新服務器狀態。

+0

是的,我正在調查克朗的工作,以及我的網站的另一部分,但我在atm託管計劃不支持cron工作。我將不得不升級獲得它們。也感謝您的建議,我會給這個嘗試似乎是一個更好的主意。 –

0

看看你的例子,我會讓所有的$狀態位爲javascript調用另一個檢查單個服務器的php頁面。

但是,將狀態檢查移至cron job或使用某種狀態緩存的想法也非常好。也許在數據庫中存儲狀態只能檢查已過期的狀態(由您設置的時間限制)。

相關問題