2012-02-22 24 views
0

我使用下面的代碼連接到XMPP服務器(蟒蛇+ xmppy):Jabber機器人 - 如何獲得狀態更新?

c = xmpp.Client("localhost", debug=[]) 
    c.connect(("127.0.0.1", 5222)) 
    c.auth("test","test") 
    c.sendInitPresence() 
    c.send(xmpp.Presence(to="[email protected]", typ='subscribe')) 
    time.sleep(1000) 

這只是正常,管理員獲取用戶的存在更新和通訊錄中的「測試」的用戶顯示爲線上。如果我在該腳本上按ctrl + c(當它在最後睡覺時),則會發生問題,因此它會被終止。問題在於admin用戶沒有從該腳本獲取狀態更新。

我還應該提到admin用戶自動接受訂閱請求。

我的問題是:管理員用戶如何檢測到測試用戶脫機。並且更改上面的腳本不是一種選擇,因爲任何人都可以編寫這個腳本並在我的xmpp服務器上構建一個程序。

任何想法爲什麼管理員沒有收到狀態更新或如何檢測用戶'測試'下線是受歡迎的。

感謝

回答

1

檢測一個端點有沒有一個具體的存在更新設備下線了通常由服務器處理,例如通過。檢測到端點正在通信的套接字已關閉。

如果您只能控制客戶端代碼,則可以偶爾從管理客戶端發送presence probes到其所有訂閱端點。

+0

嗨。我可以控制XMPP服務器,它是openfire,如果使用上述腳本,它不會發送當前更新。它檢測到用戶已經離線,因爲如果我列出所有用戶,「測試」用戶被標記爲離線。沒有更新。我想'admin'用戶應該收到狀態更新,因爲上面的腳本將它添加到'測試'名單中 - 並且由於管理員自動接受訂閱。所以我不知道發生了什麼事情,'管理員'沒有得到離線狀態更新,但是openfire檢測到用戶「測試」已經離線。 – eleanor 2012-02-22 23:23:37

+1

然後,它聽起來像它可能是一個Openfire的錯誤。 XMPP規範指出,如果客戶端斷開連接,服務器必須生成不可用狀態:http://xmpp.org/rfcs/rfc6121.html#presence-unavailable-outbound – MattJ 2012-02-25 14:29:56