Xmpp,Strophe Js:同一用户的多个活动连接

Xmpp, Strophe Js : Multiple active connections for same user

我已经使用 xmpp + openfire + strophe 实现了网络聊天。在同一个 openfire 和 xmpp 服务器上,我们也开发了 IOS 聊天。

我面临以下问题。

假设用户 A 在 IOS 应用中的 xmpp 中连接,用户 A 与用户 B 聊天。 现在,同一用户 A 使用 strophe 通过网络聊天连接到 xmpp,用户 B 将消息发送给用户 A,然后用户 A 将仅在网络聊天连接中收到消息。

现在用户 A 在 IOS 中与 xmpp 连接,用户 B 发送消息,然后用户 A 将仅在 IOS 应用程序中收到消息,而不是在网络聊天中。

那么用户 A 是否可以在创建的所有连接中收到消息?

是否有可能一个用户有多个 xmpp 连接并且所有连接都能够向另一个用户发送消息并且能够在该用户的所有连接上接收消息?

你能帮我解决 Strophe Js 和 IOS 中的这个问题吗?

您可以通过设置不同的 RESOURCES (https://wiki.xmpp.org/web/Jabber_Resources) 来管理它。 每个设备必须声明不同的资源("myPc"、"android"、"iphone"、"ipad"、"Spark",它只是一个任意字符串)。

Openfire 必须配置为管理多个资源(服务器 -> 服务器设置 -> 资源策略)。

编辑:Openfire 还有一个 priority-based 传递系统,它选择最高优先级的资源并只向它发送消息。 (一个很好的讨论:https://community.igniterealtime.org/thread/53377) 通过设置 属性:

启用
route.all-resources

true

根据这个问题,你还需要 Openfire server, multiple connection, route.all-resources doesn't work

route.really-all-resources

设置为

true

操作方法:

  • 按数据库,添加 "ofProperty" table 两个属性
  • 或者通过openfire web client -> Server -> Server Manager -> System 属性(在页面底部添加)。

请记住

  1. Presence 有优先级(-128 到 128 之间的数字),默认 它是 1。请小心更改此数字。
  2. 当然客户端必须在发送 消息(这是你的情况,但要注意保持正确 行为)

很抱歉,但我不知道如何在 Strophe.js 中分配资源名称,正如我在某些示例中看到的那样,程序员只需将其手动添加为字符串连接(user@server/resource 而登录)