基于Ajax的聊天 - 无限服务器端循环

时间:2013-06-20 21:05:30

标签: php javascript jquery http-post

我在我的页面上聊天。我每5秒发送一次ajax帖子来查看回复。是否有更好的解决方案来避免发送太多请求?

像服务器上的无限循环。

PHP服务器端:

$i = 0
while(!$replies = checkNewReplies() && $i++<1000){        
    sleep(1);
}
echo json_encode($replies);
exit;

错误的做法?

3 个答案:

答案 0 :(得分:0)

我认为有很多可能的解决方案。你可以看看长轮询(这基本上就是你在做什么)。

另一种选择是使用类似XMPP的东西,它有一些Javascript客户端。

答案 1 :(得分:0)

这个页面肯定对您有所帮助,它帮助我在我开发的内部销售仪表板中集成了一个完全实时的消息系统....非常酷的东西。

http://www.aljtmedia.com/blog/websockets-for-php-ratchet-push-chat-application?article=24#.UcNxNfmkoSU

答案 2 :(得分:0)

我认为Facebook做得好的一件事是,当文本输入为focus时,他们使用长轮询。他们打开该连接,直到输入为blur - 红色。这让我觉得他们有一些DOM事件监听器等待打开和关闭连接。长轮询是棘手的,因为它可能会在您的服务器上造成严重破坏。您必须确保当正文onload关闭所有可能已打开的连接时。

您的方法听起来很合理,但如果您从数据库中提取数据,而且您对数据库的调用量足够舒服,那么您可以使用usleep()而不是sleep()。您可以随时使用memcached之类的SQL语句。

但这都是自以为是。