if(isset($_GET['actionid']) && isset($_GET['profileid']))
{
$actionid = $_GET['actionid'];
$profileid = $_GET['profileid'];
$res = $database->news_poll($profileid,$actionid);
$k = 0;
while(!$NROW =$res->fetch_array())
{
usleep('50000000');
$res = $database->news_poll($profileid,$actionid);
}
$action = actiontype_encode($NROW,'0',$json,$encode,$database);
$data['action'] = $action;
echo json_encode($data);
}
这是我用于轮询服务器以获取新数据的脚本。 但是工作浏览器仅停止为我的网站工作。我想问题是,当特定浏览器订阅新数据时,连接保持打开,因此浏览器不能再向同一服务器发出请求。请解释是否有任何问题。
答案 0 :(得分:1)
如果有任何方法可以,我建议您使用NodeJS和SocketIO进行长时间轮询。您的Web服务器需要为每个连接的用户保持打开请求,这比Apache / PHP可以处理的时间更长。
如果那是不可能的,我推荐短轮询,每隔3秒做一次正常的ajax请求。这不是完美而是可管理的。
我最近用more details回答了类似的问题。
无论语言如何,我都强烈反对编写自己的长轮询服务器,除非您希望将其作为您的项目几年。我参与过一个项目,该项目使用了一个编写C的本地长轮询服务器,然后用Java重写,但它并不漂亮。
答案 1 :(得分:0)
我发现问题在于Apache一次只能为一个客户端提供多个请求。因此,当请求对后端的长轮询脚本请求新数据时,请求会将来自同一浏览器的其他请求挂起到同一服务器。
要克服这个缺点,需要使用node.js或tornado。