2012-02-27 60 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個設備登錄。