smack+openfire源碼分析

一、 Smack源碼分析

1、聲明org.jivesoftware.smack.XMPPConnection對象,使用connect方法連接服務器,使用SocketFactory中獲取socket對象作爲通訊連接,分別實例化PacketWriter和PacketReader對象,使用兩個線程負責消息讀寫,具體使用BufferedReader類和BufferedWriter類來進行消息的接受和發送;
2、將請求數據封裝到Packet對象裏,Presence實體類繼承Packet,再把這對象放到BlockingQueue<Packet>消息隊列裏頭,由PacketWriter線程裏的writePackets方法實時去寫;BlockingQueue<Packet>初始化大小爲500;


二、Openfire源碼分析
1、 org.jivesoftware.openfire.starter. ServerStarter的main函數啓動服務;
2、 使用類加載器創建org.jivesoftware.openfire.XMPPServer實例;在XMPPServer構造函數調用start方法,加載模塊,調用模塊,啓動模塊。其中
org.jivesoftware.openfire.spi.ConnectionManagerImpl被啓動,使用mina框架新建監聽、啓動監聽。使用org.jivesoftware.openfire.nio. ConnectionHandle類繼承mina的IoHandlerAdapter類並重寫messageReceived方法來處理請求,
3、 在messageReceived方法裏調用StanzaHandler process方法,將消息寫入mina session,然後判斷請求類型(message、presence、iq)進行先關操作;分別對應類是:
Message: org.jivesoftware.openfire.MessageRouter > route
Presence: org.jivesoftware.openfire.PresenceRouter > route
Iq: org.jivesoftware.openfire.IQRouter > router
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章