3

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

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

PHP服务器端:

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

方法错误?

4

3 回答 3

0

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

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

于 2013-06-20T21:11:29.203 回答
0

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

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

于 2013-06-20T21:18:15.443 回答
0

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

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

不过,这都是自以为是的。

于 2013-06-20T21:18:26.810 回答