XMPP同一用户问题的多个会话

via*_*ian 12 javascript xmpp strophe punjab

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

谢谢.

ggo*_*zad 27

您需要了解JID的工作原理,优先级以及如何发送消息.

JID的形式如下: user@domain/resource

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

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

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

您可以在发送状态时设置优先级([-128,127]中的整数)(例如,参见rfc获取完整规范):

<presence>
  <status>Learning XMPP</status>
  <priority>1</priority>
</presence>
Run Code Online (Sandbox Code Playgroud)

  • 2号是不准确的.它可以按照定义传递给所有人,或者根据其他一些特定于实现的标准传递给一个接收者.[第11.1节入境斯坦萨斯](http://xmpp.org/rfcs/rfc3921.html#rules).但仍然是一个很好的答案. (3认同)

Zas*_*ash 11

如果您想要进行整个对话,包括您客户端发送的消息以显示在另一个会话中,那么Carbons就是您正在寻找的功能.我在一个插件来实现这个韵律.

所需的客户端部分不应该太难写,这是在Verse库中完成的.