我的页面上有一个聊天。我发送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之类的东西。
这些都是固执己见的