2012-03-15 94 views
1
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); 
} 

这是我的脚本轮询服务器的新数据。 但工作浏览器停止工作只为我的网站。我想问题是,当一个特定的浏览器订阅新数据时,连接保持打开状态,因此浏览器不会再向同一台服务器发出请求。请解释是否有问题。不能实现长轮询

回答

1

如果您有任何方法可以,我建议您使用NodeJSSocketIO进行长时间轮询。您的Web服务器需要为每个连接的用户保留一个请求,这比Apache/PHP可以处理的时间长得多。

如果这是不可能的,我建议短轮询,每3秒做一个正常的ajax请求。这并不完美但易于管理。

我最近用more details回答了一个类似的问题。

无论使用何种语言,我强烈建议您不要编写自己的长轮询服务器,除非您希望将其作为您的项目数年。我曾参与过一个项目,该项目使用了一个用C语言编写的本地长长轮询服务器,然后用Java重新编写,而且它不太好用。

+0

我需要实施长时间轮询。这是非常重要的,真的需要使用长轮询而不是短轮询来实现它。请帮助。请指出实施中的实际问题。 – 2012-03-15 14:14:04

0

我发现问题在于Apache一次只能处理一个客户端发出的多个请求。因此,在后端的长轮询脚本中请求新数据时,请求会将来自同一浏览器的其他请求挂起到同一台服务器。

为了克服这个缺点,需要使用node.js或龙卷风。