我有一個xmpp/ejabberdb應用程序,它使用外部服務提供事件功能,但當此服務不可用時,我想要斷開/註銷所有客戶端。這可能嗎?怎麼樣?從XMPP註銷客戶端
0
A
回答
2
我按照我需要的方式工作。事實上,我沒有找到任何簡單的方法讓我自己的服務器註銷所有連接的用戶在某種情況下,所以我挖掘了ejabberd的代碼,並找出了一種方法來自己做。
在ejabberd_c2s.erl模塊中,當客戶端註銷或由於某種原因導致其套接字被丟棄時,FSM將終止,並執行所有必要的清理以保持ejabberd的一致性。
我只要在模塊中創建一個導出函數shutdown/1,調用gen_fsm:send_all_state_event/2發送一個信號讓它終止。 至於每個連接都有一個c2s進程,我需要爲每個用戶調用這個函數。
--- UPDATING --- 其實沒有必要創建這個關機功能,ejabber_c2s已經處理「封閉」的信號,其中做同樣的事情的能力。因此,不要創建關閉函數,只需執行ge_fsm:send_event(C2SPid,closed)就足夠了。 --- UPDATING ---
要發現用戶的C2S進程PID我只是用ejabberd_sm:get_session_pid/1或ejabberd_sm:dirty_get_sessions_list/0(所有會話)。
這對我來說很好,但如果有人有更好的主意,請在這裏添加。
謝謝
0
我不知道ejabberd的細節,但是您可以編寫一個自定義XMPP組件來輪詢外部服務(或偵聽存在事件,如果它是另一個XMPP組件),然後在服務不可用時註銷用戶。
相關問題
- 1. XMPP客戶端帳戶註冊
- 2. WCF客戶端安全協商註銷
- 3. https客戶端證書註銷/ relogin
- 4. SignalR客戶端如何檢測註銷?
- 5. OCS Xmpp Iphone客戶端
- 6. GWT - Strophe XMPP客戶端
- 7. OpenWRT XMPP客戶端庫?
- 8. Xamarin XMPP客戶端庫
- 9. iOS和XMPP客戶端
- 10. XMPP客戶端不兼容
- 11. XMPP/Jabber客戶端幫助
- 12. 斷開node-xmpp客戶端
- 13. 如何從推送通知中註銷客戶端?
- 14. Python xmpppy客戶端不發送消息到appengine xmpp客戶端
- 15. 將HTTP客戶端切換到CCS(XMPP)客戶端
- 16. 從後端註銷
- 17. 如何註冊Google App Engine到xmpp客戶端?
- 18. 使用Google GCM的Xmpp Python客戶端
- 19. 最好的XMPP客戶端PHP/Javascript
- 20. 使用Google App Engine的xmpp客戶端
- 21. XMPP服務器的Erlang客戶端
- 22. 全功能的XMPP網絡客戶端
- 23. Node.js的最佳XMPP客戶端庫
- 24. 最佳python XMPP/Jabber客戶端庫?
- 25. 客戶端使用XMPP的strophe BOSH
- 26. 如何測試xmpp客戶端?
- 27. XMPP/Jabber基於Web的客戶端
- 28. XMPP客戶端與服務器ejabberd
- 29. 使用GWT-Strophe的GWT XMPP客戶端
- 30. AMQP或XMPP的客戶端通知
自定義XMPP組件正是我所擁有的,關鍵是,我如何註銷客戶端?我不是XMPP/Ejabberd方面的專家,所以我想提醒我如何以編程方式註銷客戶端。 – RobisonSantos 2012-01-18 11:13:39