当前位置: 首页 > 面试题库 >

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

邹宣
2023-03-14
问题内容

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

我考虑过的事情:

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

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


问题答案:

一些注意事项:

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


 类似资料:
  • 问题内容: 在我目前正在从事的项目中,我们需要开发一个Web聊天应用程序,而不是一个非常复杂的聊天,仅是一种将两个人联系起来谈论一个非常具体的话题的方式,我们不需要任何身份验证对于这两个用户之一,我们不必支持表情符号,头像或类似的东西。 一些项目成员建议我们可以通过BOSH使用XMPP,我说这就像试图用船网抓鱼,并提出了一种更简单的方法,例如简单的Ajax / MySQL网络聊天,但是我们担心性能

  • 问题内容: 我最近在StackOverflow上问了一个有关我的功能的问题,人们建议我使用Ajax Long Polling。我花了几天的时间研究该主题,并尝试编写基本的长轮询代码,但是这些代码都没有起作用,而且我什么也做不了。 这是我的基本功能: 有人能够告诉我如何将其转变为基本的长轮询功能,或者甚至直接指向我需要到达的路径。很感谢任何形式的帮助。谢谢! 问题答案: 通常(即,当不使用长时间轮询

  • 问题内容: 我已经编写了一个小型的Web应用程序,该应用程序基本上是浏览器中基于JQuery的聊天客户端,要获取我正在使用AJAX请求对服务器进行轮询然后附加任何新回复的帖子,我担心使其效率如此之高尽可能避免失去实时感。 http://darklightweb.co.uk/RealTime/ 我看不到任何可能的中断方式,因此我每5秒钟轮询一个页面,如果没有新的帖子可用于保持数据空闲(如果确实有空闲

  • 长轮询在GCP PubSub JS SDK上可用吗? 我希望能够同时处理多个PubSub消息,例如: 这是它将如何在AWS上工作的一个示例: SQS队列包含超过5条消息。 侦听器将在单个中一次获得5条消息。事件

  • 我想测量和比较长轮询和WebSocket之间的服务器性能。我用ratchet(PHP websockets)构建了一个简单的PHP应用程序,它只在控制台中输出数据(指南:http://socketo.me/docs/hello-world)。长轮询应用程序也是PHP,只生成随机数并将其记录在控制台中(本文:如何实现基本的“长轮询”?)。 有没有办法在不使用数据库的情况下对这些应用程序进行公平的比较