php - 使用 PHP 无限循环持久连接到服务器

标签 php javascript infinite-loop persistent-connection

我想更新我的网站,因为数据库中添加了新信息。我无法使用Node.jsComet Programming ,和Javascript's setInterval由于请求太多,这似乎是一个坏主意。

现在我正在使用这样的东西:

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个在线用户)

最佳答案

通过 WebSockets 推送是一种替代方案,但仅适用于最新版本的浏览器。

您的脚本的缺点是每 100 毫秒询问一次(这非常短),而且当最新的 ajax 响应尚未到达时也是如此。仅当前一个 ajax 已到达并且自上次 ajax 已达到以来的最短时间(超时)时,我才会更改脚本以请求服务器进行更改。

例如(未经测试):

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();

关于php - 使用 PHP 无限循环持久连接到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10947765/

相关文章:

php - 如何将 MySQL 输出中第一行的格式设置为与 PHP 中所有后续行不同的格式?

php - 构建 'simple' php url 代理

php无法读取utf8中的字符

c++ - 无限循环多线程

php - 我正在使用 Chrome,无法使用 php 从 mysql 获取图像显示

javascript - Jquery 滚动必须更频繁地触发

javascript - 输入文本字段文本光标不出现?

javascript - 错误: Invalid value for <circle> attribute cx ="NaN" in dimple.js

algorithm - 在 brainfuck 程序中检测无限循环

C 程序中无法退出 while 循环