当两个 Jabber (XMPP) 客户端连接时,只有一个能够接收消息,两个都可以发送

Posted

技术标签:

【中文标题】当两个 Jabber (XMPP) 客户端连接时,只有一个能够接收消息,两个都可以发送【英文标题】:When two Jabber (XMPP) clients connected, only one is able to receive messages, both can send 【发布时间】:2012-11-06 18:40:18 【问题描述】:

我有一个 Windows XMPP 客户端 - PSI 和一个 android 客户端 - IMO。我连接到同一个自定义服务器,使用两个不同的资源(桌面上的主机名,不知道 IMO 使用什么作为资源)。当有人向我发送消息时,只有桌面客户端能够接收它。 Android客户端只能发送。

在客户端中配置什么才能同时在两个客户端上接收消息?

【问题讨论】:

【参考方案1】:

想通了。 XMPP 协议具有分配给资源的优先级。请参阅http://xmpp.org/rfcs/rfc3921.html#rules 中的 11.1。有效范围是 -127 .. +128

IMO 发送优先级 1(至少在我的版本中)。将 PSI 中的优先级设置为 -120 使我的电话客户端始终收到消息。我将使用优先级来利用降低优先级的自动离开功能。

【讨论】:

我猜有些服务器被配置为将消息发送给具有相同优先级的所有个客户端。 @unor 也可以这样。还不错的是,一旦我的 Android 客户端收到一条消息并使用桌面客户​​端回复,后续消息将转到桌面客户端。 我们有什么方法可以使用 ejabberd 实现它吗?【参考方案2】:

如果您在 Openfire 服务器上拥有管理员权限,将系统属性“route.all-resources”设置为“true”应该允许所有连接的客户端接收发送到 Jabber ID 的消息。这在我的情况下有效。

【讨论】:

以上是关于当两个 Jabber (XMPP) 客户端连接时,只有一个能够接收消息,两个都可以发送的主要内容,如果未能解决你的问题,请参考以下文章

iPhone Jabber/XMPP 客户端...“TURN 连接失败”

Jabber - xmpp 冲突

XMPP 流发送,不接收。为啥 XMPP 流可能会断开连接?

身份验证 c# 的 Jabber 客户端问题

如何了解更多 XMPP/Jabber 命令

向所有连接的客户端/资源发送 xmpp 消息