连接XMPP的最佳架构是什么?

时间:2008-08-30 04:11:35

标签: networking architecture xmpp

如果我有一个单独的系统,它有自己的用户和存在概念,那么创建到XMPP服务器网络的桥梁最合适的架构是什么?据我所知,有三种主要方式:

  1. 充当服务器。这会创建一个接触点,但我担心它会影响兼容性,并可能在我的系统中产生模拟服务器的复杂性。

  2. 充当客户。这似乎意味着我的系统中每个用户需要一个连接,这样就不能很好地扩展。

  3. 我听说过XMPP网关协议,但目前还不清楚这是否比客户端解决方案更好。我也不知道这是不是标准。

  4. 任何建议或权衡都将受到赞赏。例如,这些解决方案中的任何一个都需要在目标XMPP服务器中运行代码(我不太可能这样做)。

5 个答案:

答案 0 :(得分:4)

您听说过的XMPP网关协议最有可能与传输有关。传输是连接到XMPP服务器和非XMPP服务器的服务器。通过运行传输,我可以使用我的Jabber客户端与使用MSN Messenger的人交谈。

传输通常会为其视为在线的每个JID连接一次到远程网络。也就是说,它是你反向的选择2。这是因为传输和非XMPP网络之间没有特殊的关系;交通运输只是作为一群常客。为此,XMPP客户端必须首先注册传输,为远程网络提供登录凭据,并允许传输查看它们的存在。

这有可能扩展得更好的唯一原因是同一个远程网络可以有很多传输。例如,我的Jabber服务器可以运行到MSN的传输,另一个Jabber服务器可以运行另一个,依此类推,每个服务器为不同的XMPP用户子集提供连接。虽然这会分散Jabber端的负载,并且系统上的负载平衡也可能会分散负载,但它仍然需要两个系统之间的许多连接。

在你的情况下,因为(我假设)非XMPP方面是合作的,在非XMPP服务器上放置XMPP服务器接口可能是你最好的选择。该服务器接口最适合管理XMPP JID之间的映射以及JID在其自己的网络上的显示方式,而不是强制XMPP用户注册等等。

如果你没有看到这些,你会发现它们很有用:

希望有所帮助。

答案 1 :(得分:2)

我也在研究类似的系统。

我将使用网关/组件路由。我已经看了几个选项,并以此结算。

网关基本上是一个组件,其特定目的是将Jabber / XMPP与另一个网络连接起来。在将XMPP用作客户端时,您必须构建您认为理所当然的大部分内容。就像名册控制一样。

在线实际设计和构建组件的帮助很少。像上面的回答一样,我发现xmpp协议/扩展会有所帮助。主要是:

阅读这些内容将向您展示您期望能够处理的XEP。忽略将由您的组件附加到的服务器将处理的内容。

令人遗憾的是,Djabberd的文档很差,因为他们的系统“一切都是模块”,这使得服务器后端的可能性可以直接与其他网络连接。我没有取得进展。

答案 2 :(得分:2)

基本上有两种类型的服务器到服务器(s2s)连接。第一个被称为网关或传输,但它们是相同的。这可能是你正在寻找的那种。我找不到非XMPP方面的具体文档,但XMPP如何考虑对旧版服务器进行翻译是http://xmpp.org/extensions/xep-0100.html。第二种确实没有在任何额外的XEP中解释 - 它是常规的XMPP s2s连接。在RFC 3920或RFC 3920bis中查找“服务器到服务器通信”以获取最新的草稿更新。

由于您的服务器上有自己的用户和存在,并且它不是XMPP,因此这些概念不会完全映射到XMPP模型。这就是运输工作的用武之地。您必须从模型转换到XMPP模型。虽然这是一些工作,但您可以做出所有决定。

这使我们有权选择其中一个关键设计 - 您需要真正决定要从服务中将哪些内容映射到XMPP以及您不是哪些内容。这些功能和用例描述将推动整体结构。例如,这是一个与AOL或MSN聊天服务交谈的交通工具吗?然后,您需要一种方法来映射其等效的名单,状态,并将会话信息以及本地用户的登录名和密码保存到远程服务器。这是因为您的传输需要伪装成这些用户,并且需要登录它们。

或者,也许你只是一个s2s桥接到别人的基于XMPP的国际象棋游戏,所以你不需要在远程服务器上登录,并且可以像电子邮件服务器一样操作并来回传递信息。 (对于正常的s2s连接,将存储的唯一会话将是与远程服务器一起使用的SASL身份验证,但在用户级别s2s只维护连接,而不是登录会话。)

其他因素包括您的可扩展性和模块化。您解决了一些可扩展性问题。看一下放入多个运输来平衡负载。对于模块化,请参阅您希望决定如何处理每个数据包或操作的位置。例如,您如何处理和跟踪订阅数据?你可以把它放在你的交通工具上,但那会更难以使用多种交通工具。或者,如果您将决策放在靠近核心服务器的位置,则可以使用更简单的传输,并在需要与XMPP以外的服务进行通信时使用一些通用代码。权衡是一个更复杂的核心服务器,具有更大的漏洞潜力。

答案 3 :(得分:2)

您应该使用哪种架构取决于非XMPP系统。

  1. 您是否操作非XMPP系统?如果是,您应该找到一种方法将XMPP-S2S接口添加到该系统,换句话说,使其充当XMPP服务器。 AOL正在将这种方法用于AIM。不幸的是,他们限制了他们访问GoogleTalk的门户。

  2. 您不操作非XMPP系统,但它有一个可以使用的联合接口 - i。即您的网关可以与其他系统作为服务器进行通信,并具有自己的命名空间。在这种情况下,您可以构建一个双方充当联合服务器的网关。因为我不知道使用这种方法的网关的任何示例,但是如果要构建公共XMPP到SIP桥,则可以使用它。

  3. 如果非XMPP系统没有为您提供联合接口,那么您没有其他选择,只能充当一堆客户端。在XMPP世界中,这被称为“传输”。传输服务器和普通服务器之间的差异基本上是:

    • 传输的JID是从另一个系统映射的(例如john.doe \ 40example.net@msngateway.example.org - 非常难看!)
    • 想要使用传输的XMPP用户需要在非XMPP系统上创建帐户,并将该帐户的登录凭据提供给传输服务。 XMPP协议甚至具有协议扩展,允许XMPP用户在带内进行传输注册。

答案 4 :(得分:0)

另一种方法是与您的XMPP服务器供应商合作。大多数都有内部API,可以从第三方应用程序中进行注入。例如,Jabber XCP为此提供了一个非常易于使用的API。

(披露:我在Jabber,Inc,Jabber XCP背后的公司工作)