扩展聊天应用程序 - 短轮询与长轮询(AJAX、PHP) [英] Scaling a chat app - short polling vs. long polling (AJAX, PHP)

查看:30
本文介绍了扩展聊天应用程序 - 短轮询与长轮询(AJAX、PHP)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我经营一个网站,用户可以在其中通过浏览器相互聊天(想想 Facebook 聊天).处理实时交互的最佳方式是什么?(现在,我每 30 秒进行一次民意调查,以更新在线用户和新收到的消息,并且每秒在聊天页面上进行另一次民意调查以获取新消息.)

I run a website where users can chat with each other through the browser (think Facebook chat). What is the best way to handle the live interaction? (Right now I have a poll going every 30 seconds to update online users and new incoming messages, and another poll going on chat pages every second to get new messages.)

我考虑过的事情:

  • HTML5 Web Sockets:没有使用它,因为它不适用于所有浏览器(仅限 chrome).
  • Flash Sockets:没有使用它,因为我想最终支持移动网络.

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

Right now, I am using short polling because I don't know how scalable AJAX long polling would be. I'm running a VPS server from servint right now (running apache). Should I use long polling or short polling? I don't need absolutely immediate response times (just "good enough" for a chat app). Is short polling this often with a few hundred-thousand users going to kill my server? How do I scale this, please help!

推荐答案

一些注意事项:

  • 每秒轮询一次是矫枉过正的.该应用程序仍然会感觉非常灵敏,检查之间会有几秒钟的延迟.
  • 为了节省数据库的流量并加快响应速度,请考虑使用内存缓存来存储未传递的消息.您仍然可以将消息保存到数据库中,内存缓存将仅用于查询新消息,以避免每个用户每 x 秒查询一次数据库.
  • 在 x 秒不活动后超时用户的聊天以停止轮询到您的服务器.这可以确保打开窗户的人不会继续产生流量.提供一个简单的还在吗?继续聊天."超时会话的链接,并在超时前警告用户,以便他们可以延长超时时间.
  • 我建议从轮询开始,而不是彗星/长轮询/套接字.轮询很容易构建和支持,并且可能会在短期内很好地扩展.如果您获得大量流量,您可以将硬件和负载平衡器用于解决问题以进行扩展.整个网络都基于轮询——轮询无疑是规模化的.在某种程度上,彗星/长轮询/等替代方案的复杂性是有意义的,但在证明额外的开发时间/复杂性是合理的之前,您需要大量流量.

这篇关于扩展聊天应用程序 - 短轮询与长轮询(AJAX、PHP)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆