我已经实现了一个Chrome扩展程序,它可以通过BOSH连接与运行在远程服务器上的Punjab服务器一起使用XMPP聊天。该扩展程序是使用JavaScript库Strophe实现的。我遇到的问题是当同一用户有多个会话(例如,在同一台机器上运行两个不同的浏览器)时,我无法从第一个聊天窗口接收和记录消息并在第二个聊天窗口中显示。需要一些机制来解决这个问题。我是否能够以某种方式接收发送给其他用户的消息?这个问题也可以在2台或更多不同的计算机上复制,因此需要解决这个问题。
谢谢。
谢谢。
你需要了解JID是如何工作的,什么是优先级以及如何发送消息。
JID的格式为:user@domain/resource
已登录用户的JID必须是唯一的。通常在使用Web客户端时,您会为每个会话分配一个随机资源,以避免冲突。
现在,当用户发送消息时,<message>
节的to
属性指定消息的接收者。如果资源是接收者的一部分,则只有该JID将接收消息。如果接收方是裸JID(user@domain),则优先级发挥作用(请参见此处):
您可以在发送状态时设置优先级(在[-128, 127]中的整数)(请参见rfc以获取完整规范),例如:
<presence>
<status>Learning XMPP</status>
<priority>1</priority>
</presence>
简而言之!
用途:
mXmppConnection.login (USERNAME, PASSWORD, StationName/NickName);
而不是:
mXmppConnection.login (USERNAME, PASSWORD);
<enable xmlns='urn:xmpp:carbons:2'/>
记得在所有会话中启用它。这样,两个会话都将接收到发送和接收的消息。对于接收消息的情况,如果您启用了“carbon”,在在线状态下将不会受到影响。
再次提醒,如果您不希望某条消息被抄送,请在stanza内添加<private/>
、<no-copy/>
。
<private xmlns='urn:xmpp:carbons:2'/>
<no-copy xmlns='urn:xmpp:hints'/>