问题描述
我运行一个网站,用户可以互相通过浏览器聊天(认为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套接字:没有使用这个,因为它不能在所有的浏览器(仅限于镀铬)工作 。
- 闪光套接字:没有使用这个,因为我想最终支持移动web
现在,我正在使用短投票,因为我不知道如何可扩展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)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!