支持单个用户多个窗口-使用strophe.js的XMPP聊天

时间:2019-03-06 05:27:26

标签: xmpp strophe

我有一个可以合并到多个主机中的聊天客户端,该聊天客户端是独立的。

用户A在两个位置登录-例如chrome和firefox

因此,用户A发送消息给用户B,用户B收到了消息,聊天消息显示在两侧。

现在用户A也已在单独的浏览器的窗口中登录,我想推送消息并在此处显示消息

就像您在多个浏览器中打开Gmail聊天窗口一样,发送的邮件也会在两端推送。

3 个答案:

答案 0 :(得分:0)

XMPP协议将JID定义如下:

  

JID由三个主要部分组成:

     

节点标识符(可选)域标识符(必需)   资源标识符(可选)JID被编码为UTF-8。语法将   首先介绍,然后进行具体说明并进一步   限制说明。

或更简单的语言,您的JID的构建依据: 用户名@ YourDomain.com /资源

一个用户可以拥有许多资源, 例如:

  • prashantsahni@domain.com/phone
  • prashantsahni@domain.com/firefox
  • prashantsahni@domain.com/chrome

每次只为用户设置正确的资源,然后让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:

  • userA@domain.com/chrome
  • userA@domain.com/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>

您需要从转发的节中提取原始消息。另请注意,您可以将每个浏览器选项卡用作单独的资源。您可能还希望配置服务器一次可以为用户处理的最大资源数量。