【发布时间】:2019-03-06 05:27:26
【问题描述】:
我有一个聊天客户端,可以并入多台主机,聊天客户端是独立的。
用户 A 在两个地方登录 - 比如 chrome 和 firefox
所以用户A发送消息用户B,用户B收到消息,聊天消息显示在双方。
现在用户A也在单独浏览器的窗口中登录了,我想推送消息并在这里显示消息
就像在多个浏览器上打开 Gmail 聊天窗口一样,发送的消息会在两端推送。
【问题讨论】:
我有一个聊天客户端,可以并入多台主机,聊天客户端是独立的。
用户 A 在两个地方登录 - 比如 chrome 和 firefox
所以用户A发送消息用户B,用户B收到消息,聊天消息显示在双方。
现在用户A也在单独浏览器的窗口中登录了,我想推送消息并在这里显示消息
就像在多个浏览器上打开 Gmail 聊天窗口一样,发送的消息会在两端推送。
【问题讨论】:
XMPP 协议定义 JID 如下:
JID 由三个主要部分组成:
节点标识符(可选)域标识符(必需) 资源标识符(可选) JID 采用 UTF-8 编码。语法将 首先提出,然后是具体的澄清和进一步 限制性言论。
或者用更简单的语言构建 JID: 用户名@YourDomain.com/Resource
一个用户可以拥有许多资源, 例如:
每次只需为用户设置正确的资源,然后让 XMPP 服务器来处理其余的事情。
and you can look at this post 看看如何使用 strophe 进行操作
你可以在这里阅读更多关于它的信息: https://xmpp.org/extensions/xep-0029.html
【讨论】:
我正在使用消息碳。 strophe 提供了一个插件。 - 一级碳
【讨论】:
我已经使用消息碳实现了。 XEP 为here。为此,您需要检查服务器是否支持此 XEP。大多数服务器,Ejabberd、MongooseIM、Openfire 等,都支持扩展。服务器会将消息 carbon 转发到每个资源。一旦你在你的服务器中启用了消息碳,你所需要的就是处理从每个资源转发给你的 JID 节。
假设用户 A 和用户 B 的 JID 是 userA@domain.com 和 userB@domain.com,您使用下面的完整 JID 登录 chrome 和 firefox:
现在,当您开始从 chrome 向用户 B 发送消息时,该消息将被发送到您的 XMPP 服务器,然后该服务器还将相同的消息转发到您的 Firefox 浏览器。假设从 chrome 发送的原始消息节如下:
<message xmlns='jabber:client'
from='userA@domain.com/chrome'
to='userB@domain.com'
type='chat'>
<body>What man art thou that, thus bescreen'd in night, so stumblest on my counsel?</body>
<thread>0e3141cd80894871a68e6fe6b1ec56fa</thread>
</message>
您应该在您的 Firefox 中收到转发的节,如下所示:
<message xmlns='jabber:client'
from='userA@domain.com'
to='userA@domain.com/firefox'
type='chat'>
<received xmlns='urn:xmpp:carbons:2'>
<forwarded xmlns='urn:xmpp:forward:0'>
<message xmlns='jabber:client'
from='userA@domain.com/chrome'
to='userB@domain.com'
type='chat'>
<body>What man art thou that, thus bescreen'd in night, so stumblest on my counsel?</body>
<thread>0e3141cd80894871a68e6fe6b1ec56fa</thread>
</message>
</forwarded>
</received>
</message>
您需要从转发的节中提取原始消息。另请注意,您可以将每个浏览器选项卡用作单独的资源。您可能还想配置服务器一次可以为用户处理的最大资源数。
【讨论】: