2012-06-08 36 views
0

我想讓我的網站更新一個新的信息添加到數據庫中。我不能使用Node.jsComet Programming,而Javascript's setInterval由於請求太多而似乎不太合適。通過PHP無限循環持續連接服務器

我現在用的是這樣的:

的Javascript:

var url = "path_to/file.php"; 
var req = xmlhttp(); 
req.open("GET", url, true); 
req.send(null); 
poll = setInterval(getResponse, 100); 
function getResponse() 
{ 
    var data = req.responseText; 
    var res = document.getElementById("response"); 
    res.innerHTML = data; 
} 

PHP:

<?php 
    set_time_limit(0); 
    ob_start(); 

    while(true) 
    { 
    #CODE 
    flush(); 
    ob_flush(); 
    sleep(0.3); 
    } 

    flush(); 
    ob_flush(); 
?> 

這是一個好主意?我可以毫無問題地使用它嗎?也許有人知道更好的方法來保持連接? (在我的網站上將會有500個在線用戶)

+0

你試圖做什麼以及期望的結果是什麼?爲什麼會有這個無限循環?這個'flush(); ob_flush();'你以後'while(true){..}'永遠不會被執行...... – shadyyx

+0

@shadyyx這個例子將用於一個聊天系統,但是我也必須在網站上顯示新的信息添加到數據庫中。 (我的oppinion每秒發送Ajax請求會減慢整個頁面的速度)。 [謝謝我將刪除這些行。 ] – John

+0

我從來沒有見過這樣的實現,但AJAX請求。如果您認爲每一秒都是非常耗時且耗費服務器資源您仍然可以每隔3秒鐘請求更改...... – shadyyx

回答

1

推012 via是一種替代方案,但只適用於最新版本的瀏覽器。

你的腳本的缺點是每100ms詢問一次(這個很短),當最新的ajax響應沒有到達時也是如此。我會改變腳本,只在前一個Ajax已經到達並且自從最後一個Ajax達到後的最小時間(超時)時向服務器請求更改。

E.g. (未經測試):

function getResponse() { 
    var data = req.responseText; 
    var res = document.getElementById("response"); 
    res.innerHTML = data; 
    setTimeout(getResponse, 500); 
} 
var url = "path_to/file.php"; 
var req = xmlhttp(); 
req.open("GET", url, true); 
req.send(null); 
getResponse();