2012-01-28 10 views
5

Tôi tự hỏi nếu có một cách để truy vấn máy chủ XMPP (thông qua người dùng JID?) Để tìm ra phòng chat (s) người dùng này hiện đang ở? Nếu không, chúng tôi có thể truy vấn máy chủ jabber để có danh sách tất cả các phòng trò chuyện đang hoạt động không?Có cách nào để xác định Hội nghị Người dùng Mulit (MUC) nào mà người dùng đã tham gia không?

BTW chúng tôi đang bật ejabber được bật để trò chuyện nhiều người. Một giải pháp sử dụng một thư viện java (smack?) Sẽ là lý tưởng.

+0

Bạn có muốn danh sách phòng bạn đang ở hoặc người dùng khác không? Không có câu trả lời tốt cho một trong hai, nhưng đầu tiên là về mặt lý thuyết có thể, và thứ hai là một sự vi phạm quyền riêng tư. –

+0

tx, Joe. Tôi thực sự muốn có được danh sách các phòng chat cho người dùng ngẫu nhiên (tôi muốn trình bày một danh sách các phòng mà bạn bè facebook của mình đã tham gia vào lúc này). –

+1

Tôi cần đầu tiên, (Để tìm các cuộc trò chuyện, người dùng hiện tại đang ở). Làm thế nào sẽ đi về việc này? Cảm ơn. –

Trả lời

3

Như đã đề cập bởi Joe Hildebrand, không có tính năng tiêu chuẩn nào vì nó là vi phạm quyền riêng tư để cho phép trên XMPP, vì vậy bạn không thể mong đợi làm điều đó từ Smack. Có thể với đặc quyền quản trị, bạn có thể có phần mở rộng giao thức tùy chỉnh thực hiện điều đó nhưng điều đó có vẻ nguy hiểm.

Tuy nhiên, ở cấp máy chủ, bạn sẽ có thể viết mô-đun tùy chỉnh cho ejabberd sẽ truy vấn hoặc lập chỉ mục tất cả các phòng mà người dùng tham gia. Đây không phải là tiêu chuẩn và có liên quan đến phát triển plugin.

0

Bắt tất cả các phòng trò chuyện không thành vấn đề, chỉ cần use this query.

Dường như đã có một câu hỏi về cách truy xuất các phòng có dấu vết. Look here.

+1

tuyệt vời, tx. Tôi sẽ tiếp tục tìm cách để có được phòng cụ thể (s) cho một người dùng nhất định .. jabber đã có thông tin này ở đâu đó .. –

+0

@YuriRomanenko bạn có thể cung cấp bất kỳ bản cập nhật? –

1

Có hai (có thể ba) tổ chức XMPP có thông tin rằng:

  • thành phần XMPP MUC cung cấp các phòng MUC
  • người sử dụng XMPP khách hàng (hoặc tốt hơn các thư viện XMPP được sử dụng bởi người dùng)
  • lẽ server XMPP (s) (nhưng chúng ta hãy bỏ qua điều đó)

Tại thời điểm viết bài này, không có cách nào tiêu chuẩn (về XEPP XEP) để truy vấn thông tin đó. Như Joe Hildebrand đã chỉ ra, điều này sẽ dẫn đến rò rỉ thông tin mà không phải là những gì chúng ta muốn trong hầu hết các trường hợp.

Nhưng bạn có thể mở rộng thành phần MUC để cung cấp thông tin đó (nhớ XMPP dễ dàng mở rộng) hoặc thư viện ứng dụng XMPP. Cách tiếp cận thông thường sẽ là thông qua truy vấn iq. Ví dụ:

<iq type='get' from='[email protected]/balcony' to='capulet.lit' id='q1'> 
    <query xmlns='http://jabber.org/protocol/muc#joinedrooms'/> 
</iq> 

Các đối tượng hỗ trợ truy vấn đó sau đó sẽ báo cáo lại phòng đã gia nhập của thực thể được yêu cầu. Ngoài ra, họ có thể thông báo tính năng http://jabber.org/protocol/muc#joinedrooms trong thông tin khám phá dịch vụ của họ.

Lưu ý rằng đây là tiện ích mở rộng giao thức giả tưởng có nghĩa là ví dụ. Tôi chưa bao giờ thấy nó trong thực tế sử dụng

Nếu thành phần MUC cung cấp tính năng này thì khách hàng không thể kiểm soát được thông tin này nếu thông tin này được hiển thị. Nhưng nếu khách hàng cung cấp tính năng này thì dĩ nhiên anh ta có thể kiểm soát ai có thể lấy thông tin này. Bạn có thể quyết định cách tiếp cận tốt hơn trong trường hợp của bạn là gì.