如何避免 XMPP 中的长寿命 tcp 连接,以便服务器可以处理数百万用户?

Posted

技术标签:

【中文标题】如何避免 XMPP 中的长寿命 tcp 连接,以便服务器可以处理数百万用户?【英文标题】:How to avoid long-lived tcp connection in XMPP so that server can handle millions of users? 【发布时间】:2013-06-01 12:09:32 【问题描述】:

如果答案是“使用 xmpp BOSH”,那么要使用 BOSH,我们需要有中间的 CM(连接管理器)服务器来与 xmpp 服务器交互。这样 xmpp 客户端到 CM 的交互将通过正常的 http 协议(可扩展)发生,但 CM 到 xmpp 服务器将再次使用长寿命 tcp 连接发生,这将导致可扩展性问题。

我们如何使 xmpp 客户端-服务器更具可扩展性??

【问题讨论】:

【参考方案1】:

Bidirectional-streams Over Synchronous HTTP (BOSH) 基本上是一种保持连接活动以允许系统来回发送和接收数据的技术。为了能够通过 HTTP 使用 xmpp,您必须使用 BOSH。

如果您担心可扩展性,您基本上可以使用旨在实现可扩展性的组件,例如 nginx 组件来代替 Apache httpd,还有许多可用的连接管理器,其中旁遮普语是最具可扩展性的。如果您使用 Openfire 作为 XMPP 服务器,它有一个预构建的连接管理器,该管理器已被证明具有可扩展性。

【讨论】:

谢谢!!!所以,你的意思是说旁遮普可以拥有数千个与 XMPP 服务器的长期连接,同时通过 http 与 xmpp 客户端通信。我知道当我们想要基于 http 的客户端上的 xmpp 时必须使用 BOSH,但问题是 BOSH 是否也应该用于可伸缩性,因为 BOSH 不需要客户端和 CM 服务器(例如旁遮普)之间的长期 tcp 连接? BOSH 实际上需要客户端和服务器之间的双向长寿命 tcp 连接。您可以通过阅读xmpp.org/extensions/xep-0124.html 上的 RFC for BOSH 的摘要来理解它。据我了解,BOSH 不是一种为高可扩展性而生的技术,如果您想要客户端和服务器之间的即时协作,则应该使用它。

以上是关于如何避免 XMPP 中的长寿命 tcp 连接,以便服务器可以处理数百万用户?的主要内容,如果未能解决你的问题,请参考以下文章

刷新令牌如何比长寿命的 JWT 更安全?

Oauth2 - 客户端凭证流中的长寿命令牌与重新身份验证

google oauth refresh token 长寿命解决方案

持久 TCP 连接、长时间超时和 IP 跳跃移动设备

Facebook 聊天 tcp 连接如何保持活动状态?

iOS,如何避免应用长寿?