【问题标题】:XMPP multiple sessions of the same user issueXMPP 同一用户的多个会话问题
【发布时间】:2012-03-16 15:48:17
【问题描述】:

我实现了一个 chrome 扩展,它允许通过 BOSH 连接使用 XMPP 聊天与远程服务器上运行的旁遮普服务器。它是使用 javascript Strophe 库实现的。我遇到的问题是当我有同一个用户的多个会话(例如,同一台机器上的两个不同浏览器)时,我无法接收我从第一个聊天窗口发送的消息并将其登录到第二个聊天窗口。需要某种机制来实现这一点。我能以某种方式接收我发送给其他用户的消息吗?该问题也可以在 2 台或更多台不同的机器上重现,因此也需要解决此问题。

谢谢。

【问题讨论】:

    标签: javascript xmpp strophe punjab


    【解决方案1】:

    您需要了解 JID 的工作原理、优先级是什么以及如何发送消息。

    JID 的格式为:user@domain/resource

    登录用户的 JID 必须是唯一的。通常,当您使用 Web 客户端时,您会为每个会话分配一个随机资源,以免发生冲突。

    现在,当用户发送消息时,<message> 节的to 属性指定消息的收件人。如果资源是接收者的一部分,那么只有那个 JID 会收到消息。如果收件人是一个裸 JID (user@domain),那么优先级就会起作用(参见here):

    1. 在任何给定时间具有最高优先级的资源将是接收传入消息的资源。
    2. 如果两个或更多资源具有相同的优先级,则具有所述优先级的所有资源都可能接收传入消息,或者取决于服务器实现,根据服务器特定的标准可能会接收到消息。
    3. 如果所有连接的资源都具有负优先级,则传入消息将在服务器端排队,直到其中一个资源将优先级重置为正。

    您可以在发送出席信息时设置优先级([-128, 127] 中的整数)(请参阅rfc 了解完整规范),例如:

    <presence>
      <status>Learning XMPP</status>
      <priority>1</priority>
    </presence>
    

    【讨论】:

    • 数字 2 不准确。它可以按定义交付给所有人,或根据其他一些实现特定标准交付给一个接收者。 Section 11.1 Inbound Stanzas。不过仍然是一个很好的答案。
    • @Robin Aha,这主要是内存不足,当然你是对的。修改。
    【解决方案2】:

    如果您希望进行整个对话,包括您您的客户发送的消息以显示在另一个会话中,那么Carbons 就是您正在寻找的功能。我有implemented this in a pluginProsody

    所需的客户端部分应该不会太难写,here's it done in the Verse library

    【讨论】:

      【解决方案3】:

      长话短说!

      用途:

      mXmppConnection.login (USERNAME, PASSWORD, StationName/NickName);
      

      而不是:

      mXmppConnection.login (USERNAME, PASSWORD);
      

      最后一个参数叫做资源,代表你登录的站点。

      这样您就可以使用相同的用户名登录,但仍然可以从 2 台设备登录。

      【讨论】:

        【解决方案4】:

        如果您在检测到多个登录时启用 Carbons:XEP-0280: Message Carbons,XMPP 服务器将向您在不同设备上登录的其他会话发送一条 carbon 消息

        <enable xmlns='urn:xmpp:carbons:2'/>
        

        记得为所有会话启用它。因此,两个会话都会收到发送和接收消息。对于接收消息的情况,如果你启用了碳,在场将不会生效。

        同样,如果您希望消息不是抄送,请在节内添加 &lt;private/&gt;&lt;no-copy/&gt;

        <private xmlns='urn:xmpp:carbons:2'/>
        <no-copy xmlns='urn:xmpp:hints'/>
        

        如果你的 XMPP 服务器中的 carbons 模块没有激活,你需要激活它。

        【讨论】:

          猜你喜欢
          • 2020-04-02
          • 1970-01-01
          • 2019-03-11
          • 1970-01-01
          • 2011-06-08
          • 1970-01-01
          • 1970-01-01
          • 2015-04-26
          • 2018-11-26
          相关资源
          最近更新 更多