棘轮服务器与长轮询

Posted

技术标签:

【中文标题】棘轮服务器与长轮询【英文标题】:Ratchet Server vs Long Polling 【发布时间】:2014-05-07 11:37:30 【问题描述】:

我正在开发一个具有聊天功能的网站,当用户收到新消息时需要即时通知。我正在尝试决定是使用 Ratchet 服务器还是使用 AJAX 实现长轮询系统。我目前已经实现了一个基本的 Pub/Sub Ratchet 服务器,当用户留在我网站上的“聊天”页面上时,它在传递通知时工作正常。我的问题是每当用户移动到任何其他页面时连接都会关闭,我需要重新创建与服务器的连接。我知道有可能的解决方案,例如在始终显示的 IFrame 中存在 websocket 连接,但是如果我不需要,我不想走这条路。更好的方法是使用 AJAX 实现长轮询吗?我担心,如果我在用户更改站点内的页面时不断地重新创建与 Ratchet 服务器的用户连接,那么当站点处于大量使用状态(一次有数千名用户)时,它会增加太多开销。有人在这方面有使用 Ratchet 服务器的经验吗?

谢谢。

【问题讨论】:

【参考方案1】:

作为免责声明,我在这方面不是很了解,但您不应该使用长轮询。您说您需要“即时通知”,这意味着使用 AJAX 您必须发出非常频繁的请求,而使用 websockets 您只需建立连接并等待数据。

我没有进行任何类型的测试,但似乎每个浏览器选项卡建立和维护一个 websocket 连接比不断发出 AJAX 请求的开销要少,更不用说你不能真正拥有“即时通知”使用 AJAX,因为您必须以不可持续的速度提出请求才能实现这一目标。

因此,为用户拥有的每个浏览器选项卡打开一个 websocket 连接。如果他们打开一个新标签,或浏览到不同的页面,只需再次打开连接。

【讨论】:

以上是关于棘轮服务器与长轮询的主要内容,如果未能解决你的问题,请参考以下文章

轮询与长轮询[关闭]

轮询长轮询长连接socket连接WebSocket

轮询长轮询长连接socket连接WebSocket

求教,django与长轮询,该怎么解决

轮询与长轮询

python之轮询长轮询websocket