2012-02-27 34 views
12

Tôi đã triển khai tiện ích mở rộng chrome cho phép sử dụng trò chuyện XMPP qua kết nối BOSH với máy chủ punjab đang chạy trên máy chủ từ xa. Nó được thực hiện bằng cách sử dụng thư viện javascript Strophe. Vấn đề tôi gặp phải là khi tôi có nhiều phiên của cùng một người dùng (ví dụ: hai trình duyệt khác nhau trên cùng một máy), tôi không thể nhận và đăng nhập vào cửa sổ trò chuyện thứ hai tin nhắn tôi đã gửi từ cửa sổ trò chuyện đầu tiên. Cần phải có một số cơ chế cho phép điều đó. Tôi có thể bằng cách nào đó nhận được tin nhắn tôi đã gửi cho một số người dùng khác không? Vấn đề cũng có thể được sao chép trên 2 hoặc nhiều máy khác nhau, vì vậy điều này cũng cần được giải quyết.XMPP nhiều phiên của cùng một vấn đề người dùng

Cảm ơn bạn.

Trả lời

27

Bạn cần hiểu cách thức hoạt động của JID, mức độ ưu tiên và cách gửi tin nhắn.

Một JID có dạng: [email protected]/resource

Các JIDs của người dùng đăng nhập phải là duy nhất. Thông thường, khi bạn sử dụng một máy khách web, bạn chỉ định một tài nguyên ngẫu nhiên cho mỗi phiên để không có các xung đột.

Bây giờ, khi người dùng gửi một thông báo, thuộc tính to của đoạn mã <message> chỉ định người nhận thư. Nếu tài nguyên là một phần của người nhận thì chỉ có JID đó mới nhận được tin nhắn. Nếu người nhận là một JID trần (user @ domain) thì ưu tiên đi vào chơi (xem here):

  1. Các tài nguyên với ưu tiên cao nhất tại bất kỳ thời điểm nào sẽ là người mà nhận được tin nhắn đến. Nếu hai hoặc nhiều tài nguyên có cùng mức ưu tiên, tất cả các tài nguyên có mức độ ưu tiên nói trên có thể nhận được thư đến hoặc tùy thuộc vào việc thực hiện máy chủ mà người dùng có thể nhận tùy thuộc vào tiêu chí dành riêng cho máy chủ.
  2. Nếu tất cả tài nguyên được kết nối có mức độ ưu tiên phủ định, thư đến sẽ được xếp hàng đợi phía máy chủ cho đến khi một trong các tài nguyên đặt lại mức độ ưu tiên là dương.

Bạn có thể thiết lập các ưu tiên (một số nguyên trong [-128, 127]) khi bạn gửi hiện diện của bạn (xem rfc đủ spec) ví dụ:

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

Số 2 không chính xác. Nó CÓ THỂ cung cấp cho tất cả như được xác định, hoặc cung cấp cho một người nhận dựa trên một số tiêu chí cụ thể thực hiện khác. [Phần 11.1 Stanzas đến] (http://xmpp.org/rfcs/rfc3921.html#rules). Vẫn là một câu trả lời tốt mặc dù. – Robin

+0

@Robin Aha, điều này phần lớn đã hết bộ nhớ và tất nhiên bạn đúng. Ammending. – ggozad

4

Tạo một câu chuyện dài ngắn!

Sử dụng:

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

Và không:

mXmppConnection.login (USERNAME, PASSWORD); 

Tham số cuối cùng được gọi là tài nguyên, và đại diện cho trạm mà bạn đăng nhập từ.

Bằng cách đó, bạn có thể đăng nhập bằng cùng một tên người dùng, nhưng vẫn còn từ 2 thiết bị.

Các vấn đề liên quan