【问题标题】:Support multiple windows for a single user - XMPP chat using strophe.js支持单个用户的多个窗口 - 使用 strophe.js 的 XMPP 聊天
【发布时间】:2019-03-06 05:27:26
【问题描述】:

我有一个聊天客户端,可以并入多台主机,聊天客户端是独立的。

用户 A 在两个地方登录 - 比如 chrome 和 firefox

所以用户A发送消息用户B,用户B收到消息,聊天消息显示在双方。

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

就像在多个浏览器上打开 Gmail 聊天窗口一样,发送的消息会在两端推送。

【问题讨论】:

    标签: xmpp strophe


    【解决方案1】:

    XMPP 协议定义 JID 如下:

    JID 由三个主要部分组成:

    节点标识符(可选)域标识符(必需) 资源标识符(可选) JID 采用 UTF-8 编码。语法将 首先提出,然后是具体的澄清和进一步 限制性言论。

    或者用更简单的语言构建 JID: 用户名@YourDomain.com/Resource

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

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

    每次只需为用户设置正确的资源,然后让 XMPP 服务器来处理其余的事情。

    and you can look at this post 看看如何使用 strophe 进行操作

    你可以在这里阅读更多关于它的信息: https://xmpp.org/extensions/xep-0029.html

    【讨论】:

    • bhai question aap samajh nahi paaye
    【解决方案2】:

    我正在使用消息碳。 strophe 提供了一个插件。 - 一级碳

    【讨论】:

      【解决方案3】:

      我已经使用消息碳实现了。 XEP 为here。为此,您需要检查服务器是否支持此 XEP。大多数服务器,Ejabberd、MongooseIM、Openfire 等,都支持扩展。服务器会将消息 carbon 转发到每个资源。一旦你在你的服务器中启用了消息碳,你所需要的就是处理从每个资源转发给你的 JID 节。

      假设用户 A 和用户 B 的 JID 是 userA@domain.com 和 userB@domain.com,您使用下面的完整 JID 登录 chrome 和 firefox:

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

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

      【讨论】:

        猜你喜欢
        • 2015-09-06
        • 1970-01-01
        • 2013-01-31
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        相关资源
        最近更新 更多