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


Ajax based chat - infinite server side loop

我的页面上有一个聊天。我发送ajax帖子每5秒检查的答复。有没有更好的解决方案来避免发送过多的请求?

类似于服务器上的无限*循环。

PHP服务器端:

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

错误的方法吗?

我认为有许多可能的解决方案。您可以查看长轮询(这基本上就是您正在做的)。

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

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

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

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

您的方法听起来很合理,但是如果您从数据库中提取数据,并且您对进入数据库的调用量足够满意,那么您可能使用usleep()而不是sleep()。你可以在SQL语句中使用memcached之类的东西。

这些都是固执己见的