2012-06-08 37 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();