2010-09-17 42 views
4

我正在使用xmpppy庫來編寫可與用戶聊天的XMPP客戶端。它有自己的XMPP用戶帳戶,需要知道給定的用戶是否在線。但是,如何做到這一點,文檔有點稀疏。你會推薦什麼?確定XMPP用戶是否在線

到目前爲止,我見過的唯一解決方案是在XMPP服務器啓動之前啓動一個守護程序,並監控發送的所有狀態消息 - 然後如果用戶發送了「I '在線'類型的消息,但不是相應的「我正在註銷」消息。但是,對於XMPP來說一般來說是新手,我認爲會有更好的方法來做到這一點。

+0

http://stackoverflow.com/questions/5300912/how-to-list-only-online-users-on-facebook-with-xmpp-framework 檢查我的職務。我已經完成了facebook和gtalk – Rakesh 2012-06-11 21:09:59

回答

2

簡單的方法是支持「訂閱」在線消息 - 這可以讓其他用戶通過「訂閱」嘗試來檢查您目前是否存在(如果他們不知道)。請檢查this useful guide開始,並且the standard獲取更多重要的詳細信息(尤其是保護您的隱私,如果需要,您不知道來自用戶的訂閱請求)。

+0

偉大的,優秀的鏈接。謝謝您的幫助! – 2010-09-18 02:30:57

+0

@克里斯,不客氣! – 2010-09-18 05:28:38

1

基本上有三種方法可以連接到XMPP服務器:作爲客戶端(您已經完成),作爲組件和作爲另一臺服務器。服務器到服務器類型(s2s)只是一個聯合連接,非常類似郵件服務器彼此交換電子郵件的方式。

亞歷克斯描述了客戶如何跟蹤存在。 XMPP要求我批准您可以收到我的出席信息,反之亦然。對於您的機器人,這意味着您需要跟蹤誰在線,最終用戶需要接受您的在線請求。這也意味着您可以響應用戶的在線請求,並隨時瞭解您的機器人是否已啓動。

最後一種方法是作爲可信任的組件,並且只有在運行服務器時纔有效。即如果您嘗試在jabber.org服務器上執行此操作,那麼您運氣不好,因爲您沒有運行該服務器。 upsdie是你可以訪問XMPP服務器的內部,就像拉取每個人在線的列表一樣。缺點是每個服務器實現的組件/ bot實現都會有所不同。

+0

是的,我實際上最終走了後一條路線 - 我只是輪詢ejabberd來找出所有在線的人,因爲這比讓客戶跟蹤它和我的程序投票更容易。一般來說,作爲XMPP的新手,我認爲通過xmpppy庫會有更簡單的方法來做到這一點,但最終並非如此 - 儘管如此! – 2010-09-24 16:57:16

0

您可能希望看到"Jabber bot - how to get the availability of contacts?"這個問題。如果我正確理解你的問題,我認爲它與它有關。

當然,正如Alex指出的那樣,無論如何,您需要訂閱用戶的存在 - 但您似乎已經理解了這一點。