我有一个可以合并到多个主机中的聊天客户端,该聊天客户端是独立的。
用户A在两个位置登录-例如chrome和firefox
因此,用户A发送消息给用户B,用户B收到了消息,聊天消息显示在两侧。
现在用户A也已在单独的浏览器的窗口中登录,我想推送消息并在此处显示消息
就像您在多个浏览器中打开Gmail聊天窗口一样,发送的邮件也会在两端推送。
答案 0 :(得分:0)
XMPP协议将JID定义如下:
JID由三个主要部分组成:
节点标识符(可选)域标识符(必需) 资源标识符(可选)JID被编码为UTF-8。语法将 首先介绍,然后进行具体说明并进一步 限制说明。
或更简单的语言,您的JID的构建依据: 用户名@ YourDomain.com /资源
一个用户可以拥有许多资源, 例如:
每次只为用户设置正确的资源,然后让XMPP服务器来处理其余的事情。
and you can look at this post来了解如何解决问题
tou可以在这里阅读有关它的更多信息: https://xmpp.org/extensions/xep-0029.html
答案 1 :(得分:0)
我正在使用消息碳。 strophe提供了一个插件。 -赤碳
答案 2 :(得分:0)
我已经使用消息碳实现了。 XEP被赋予here。为此,您需要检查服务器是否支持此XEP。大多数服务器(Ejabberd,MongooseIM,Openfire等)都支持该扩展。服务器将消息碳转发到每个资源。在服务器中启用了消息碳之后,您所要做的就是照顾要从JID的每个资源转发给您的节。
假设用户A和用户B的JID是userA@domain.com和userB@domain.com,然后使用以下完整的JID登录到chrome和firefox:
现在,当您开始从chrome向用户B发送消息时,该消息将发送到您的XMPP服务器,然后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>
您需要从转发的节中提取原始消息。另请注意,您可以将每个浏览器选项卡用作单独的资源。您可能还希望配置服务器一次可以为用户处理的最大资源数量。