我已经实现了一个chrome扩展,它允许使用在远程服务器上运行的旁遮普服务器上的BOSH连接使用XMPP聊天。它使用JavaScript Strophe库实现。我遇到的问题是,当我有同一用户的多个会话(例如同一台计算机上有两个不同的浏览器)时,我无法接收并从第一个聊天窗口发送的消息登录到第二个聊天窗口。需要有一些机制允许这一点。我能以某种方式接收我发送给其他用户的消息吗?这个问题也可以在2台或更多不同的机器上复制,所以这也需要解决。同一用户问题的XMPP多个会话
谢谢。
我已经实现了一个chrome扩展,它允许使用在远程服务器上运行的旁遮普服务器上的BOSH连接使用XMPP聊天。它使用JavaScript Strophe库实现。我遇到的问题是,当我有同一用户的多个会话(例如同一台计算机上有两个不同的浏览器)时,我无法接收并从第一个聊天窗口发送的消息登录到第二个聊天窗口。需要有一些机制允许这一点。我能以某种方式接收我发送给其他用户的消息吗?这个问题也可以在2台或更多不同的机器上复制,所以这也需要解决。同一用户问题的XMPP多个会话
谢谢。
您需要了解JID的工作方式,优先级以及如何发送消息。
甲JID的形式为:[email protected]/resource
登录的用户的的JID的必须是唯一的。通常,当您使用Web客户端时,您可以为每个会话分配一个随机资源,以免发生冲突。
现在,当用户发送消息时,<message>
节的to
属性指定了消息的接收者。如果资源是收件人的一部分,那么只有该JID将收到该邮件。如果收件人是裸JID(用户@域),则优先发挥作用(见here):
您可以设置优先级(一个整数[-128,127]),当你把你的存在(见rfc全规格)例如:
<presence>
<status>Learning XMPP</status>
<priority>1</priority>
</presence>
如果你想拥有整个对话,包括您发送从您的客户端显示在另一个会话,然后Carbons是您正在寻找的功能。我的implemented this in a plugin为Prosody。
所需的客户端部分不应太难编写,here's it done in the Verse library。
长话短说!
用途:
mXmppConnection.login (USERNAME, PASSWORD, StationName/NickName);
而不是:
mXmppConnection.login (USERNAME, PASSWORD);
称为资源的最后一个参数,代表你的站,你从登录。
这样你就可以用相同的用户名登录,但仍然可以从2个设备登录。
2号不准确。它可以按照定义向所有人交付,或根据其他实施特定标准交付给一个收件人。 [第11.1节入境节](http://xmpp.org/rfcs/rfc3921.html#rules)。尽管如此,还是一个很好的答案 – Robin 2012-02-27 18:02:57
@Robin啊哈,这大部分都是内存不足,当然你是对的。 Ammending。 – ggozad 2012-02-27 18:17:14