一尘不染

扩展聊天应用程序-短轮询与长轮询(AJAX,PHP)

php

我经营一个网站,用户可以在该网站上通过浏览器互相聊天(想想Facebook聊天)。处理现场互动的最佳方法是什么?(现在,我每30秒进行一次民意调查以更新在线用户和新收到的消息,而另一次民意调查则每秒在聊天页面上进行一次以获取新消息。)

我考虑过的事情:

  • HTML5 Web套接字:未使用此功能,因为它不适用于所有浏览器(仅适用于chrome)。
  • Flash Sockets:没有使用它,因为我想最终支持移动Web。

现在,我正在使用短轮询,因为我不知道AJAX长轮询的可扩展性。我现在正在从servint运行VPS服务器(正在运行apache)。我应该使用长轮询还是短轮询?我不需要绝对立即的响应时间(对于聊天应用程序来说“足够好”)。短轮询是否经常使成千上万的用户杀死我的服务器?我该如何缩放,请帮忙!


阅读 304

收藏
2020-05-29

共1个答案

一尘不染

一些注意事项:

  • 每秒轮询一次是过大的。两次检查之间有几秒钟的延迟,该应用程序仍会感觉非常响应。
  • 要保存数据库的流量和速度响应,请考虑使用内存中缓存来存储未传递的消息。您仍然可以将消息持久保存到数据库,内存缓存仅用于查询新消息,以避免每个用户每x秒对数据库查询一次。
  • 闲置x秒钟后,用户的聊天超时,以停止轮询服务器。这样可以确保打开窗口的人不会继续产生流量。提供一个简单的“仍然在那里?继续聊天”。链接到超时的会话,并在超时之前警告用户,以便他们可以延长超时时间。
  • 我建议从轮询开始,而不是从彗星/长轮询/套接字开始。轮询易于构建和支持,短期内可能会很好地扩展。如果流量很大,则可以增加硬件和负载均衡器来解决问题。整个网络都基于轮询-轮询肯定可以扩展。在某种程度上说,像彗星/长轮询/类似这样的替代方案的复杂性是有意义的,但是在证明额外的开发时间/复杂性之前,您需要大量的流量。
2020-05-29