2012-02-27 58 views
12

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

谢谢。

回答

27

您需要了解JID的工作方式,优先级以及如何发送消息。

甲JID的形式为:[email protected]/resource

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

现在,当用户发送消息时,<message>节的to属性指定了消息的接收者。如果资源是收件人的一部分,那么只有该JID将收到该邮件。如果收件人是裸JID(用户@域),则优先发挥作用(见here):

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

您可以设置优先级(一个整数[-128,127]),当你把你的存在(见rfc全规格)例如:

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

2号不准确。它可以按照定义向所有人交付,或根据其他实施特定标准交付给一个收件人。 [第11.1节入境节](http://xmpp.org/rfcs/rfc3921.html#rules)。尽管如此,还是一个很好的答案 – Robin 2012-02-27 18:02:57

+0

@Robin啊哈,这大部分都是内存不足,当然你是对的。 Ammending。 – ggozad 2012-02-27 18:17:14

4

长话短说!

用途:

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

而不是:

mXmppConnection.login (USERNAME, PASSWORD); 

称为资源的最后一个参数,代表你的站,你从登录。

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