前言
在使用Openfire + Asmack開發移動 IM 時發現Openfire中的會議室實現的功能並不像QQ羣,不能保存離線用戶,用戶一旦斷開連接,就會自動離開會議室。所以想通過開發插件的方法實現類似於QQ羣的功能,經過一番摸索,成功實現,寫一篇博客記錄一下心得,同時感謝那些分享技術心得的朋友。
版本:Openfire 3.9.3 + Asamck 4.0.6
需要實現的功能
- MUC會議室保存離線用戶
- 客戶端獲取已加入羣組列表
- 用戶每次登錄時重新加入列表中的羣組並獲取各個羣組的聊天記錄
相關知識和準備
1、 Openfire和XMPP基礎
- XMPP維基百科
- XMPP協議分析-原理篇
- Openfire與XMPP協議
2、 編譯Openfire源代碼
- Openfire3.9.3源代碼導入eclipse中開發配置指南
- Openfire開發配置,Openfire源代碼配置,OpenFire二次開發配置(這篇文章的源碼配置不適合3.9.3這個版本,只是後面的服務器初始配置可以看一看)
成功:
3、 開發Openfire插件
- Openfire插件開發
進入正題,實現以上3個功能:
1、 MUC會議室保存離線用戶
除了會議室(羣)創建者在創建會議室時邀請加入的會議室成員和在openfire管理後臺把用戶添加爲會議室成員這兩個方法外,其他加入會議室的用戶的角色都不是會議室成員,他們的信息不會被持久化到數據庫中,所以一旦這些用戶斷開連接,就會自動離開會議室,這就是MUC會議室無法保存離線用戶的原因。
所以,MUC會議室保存離線用戶的本質便是實現所有用戶在第一次加入會議室時自動將用戶信息持久化到數據庫中,獲得會議室成員的角色。具體是在用戶第一次加入會議室時將用戶存入ofMucMember表中。ofMucMember是聊天室房間成員信息表。
具體實現請參考:
- openfire的MUC改造類似QQ永久羣
2、 客戶端獲取已加入羣組列表
具體實現請參考:
- 將Openfire中的MUC改造成類似QQ羣一樣的永久羣
3、 用戶每次登錄時重新加入列表中的羣組並獲取各個羣組的聊天記錄
這一步很簡單,不再贅述。