1. build path:
a) source folder:包括openfire和各插件的代碼。
b) libraries:build/lib下jar包和插件下jar包,jdk/lib/tools.jar(編譯jsp須要)。
2. ant build:build/build.xml
a) openfire(default):構建openfire。
b) plugins:構建全部插件。
c) plugin –Dplugin=search:構建插件search。
3. start server:org.jivesoftware.openfire.starter.ServerStarter
a) VM arguments:根、庫、插件目錄和調試模式
-DopenfireHome=target/openfire
-Dopenfire.lib.dir=target/openfire/lib
-DpluginDirs=target/openfire/plugins
-DdevelopmentMode=true
b) classpath:
src/i18n:國際化文本。
src/resources/jar:MIME類型和Console配置文件。
4. running:
a) ServerStarter:更新ClassLoader,將lib加進來,實例化惟一的XMPPServer。
b) XMPPServer:
i. 初始化:定位openfireHome,JiveGlobals讀取conf/openfire.xml,JiveProperties讀取數據庫表ofproperty,獲取host,設置version,初始化PluginManager,檢查數據庫。
ii. 加載、初始化、啓動模塊:Model:initialize,start,stop,destroy,getName;其餘接口:ServerFeaturesProvider,特性支持;
iii. BasicModule:私有域name,中止時stop和destroy。
1. boot modules:
a) RoutingTableImpl:全部消息路由。
b) AuditManagerImpl:實現AuditManager。
c) RosterManager:全部花名冊管理。
d) PrivateStorage:全部隱私管理。
2. core modules:
a) PresenceManagerImpl:全部狀態管理。
b) SessionManager:全部會話管理。
c) PacketRouterImpl:轉給IQRouter、MessageRouter、PresenceRouter。
d) MulticastRouter:廣播特性,路由帶多個地址(addresses)的包。
e) PacketTransporterImpl:傳送包:PacketDelivererImpl:實現PacketDeliver,轉移處理;TransportHandler:網關處理。
f) OfflineMessageStrategy:離線留言策略。OfflineMessageStore:存儲離線留言。
g) VCardManager:用戶名片管理。
3. standard modules:
a) IQHandler:所有被交給。IQBindHandler:處理綁定資源請求;IQSessionEstablishmentHandler:綁定資源後激活會話;IQAuthHandler:處理登陸請求;IQPingHandler:處理ping請求;IQPrivateHandler:處理隱私請求;IQPrivacyHandler:處理私有列表請求;IQRegisterHandler:處理註冊請求;IQRosterHandler:處理花名冊請求;IQTimeHandler:處理時間請求。IQvCardHandler:處理名片請求;IQVersionHandler:處理版本請求;IQLastActivityHandler:處理最近活動請求;IQOfflineMessagesHandler:處理獲取離線留言請求;IQPEPHandler:處理公共訂閱請求;IQPEPOwnerHandler;IQSharedGroupHandler:處理共享組請求;AdHocCommandHandler:處理命令請求;IQDiscoInfoHandler;IQDiscoItemsHandler。
b) PresenceSubscrieHandler:處理狀態訂閱請求。PresenceUpdateHandler:處理狀態請求。
c) MulticastDNSService:發佈服務器信息。
d) DefaultFileTransferManager:實現FileTransferManager,管理文件傳輸;FileTransferProxy:
e) MediaProxyService:多媒體傳輸協議供jingle使用。
f) STUNService:點對點支持。
g) PubSubModule:
h) UpdateManager:檢查服務器和插件升級版本。
i) FlashCrossDomainHandler:
j) InternalComponentManager:管理組件。
k) MultiUserChatManager:管理多人聊天。
l) ClearspaceManager:
m) ConnectionManagerImpl:實現ConnectionManager,處理鏈接請求。
n) WorkGroupSupport:工做組支持
iv. StatisticsManager,PubSubEngine監聽服務啓動。
v. PluginManager:監視並加載插件目錄下的插件。
5. serving:
a) 登陸:ConnectionManager聲明瞭五種鏈接:client、client ssl、external component、other server、connection manager,它們有各自的端口而且可禁用。ConnectionManagerImpl建立多個SocketAcceptor監聽各個端口,並綁定不一樣的ConnectionHandler:管理會話,建立各自的NIOConnection和StanzaHandler並將消息交給後者處理,它建立不一樣的LocalSession。
client
client ssl
external component
connection manager
SocketAccepter
SocketAccepter
SocketAccepter
SocketAccepter
ClientCH
ClientCH
ComponentCH
MultiplexerCH
ClientSH
ClientSH
ComponentSH
MultiplexerSH
LClientS
LClientS
LComponentS
LConnectionMultiplexerS L*S
消息路徑:(SocketAccepter)IoSession = > ConnectionHandler => NIOConnection、StanzaHandler => PacketRouter(LocalSession),而後分IQ、Presence、Message分別路由。
b) IQRouter:RoutingTable、MulticastRouter、SessionManager、UserManager、IQHandler。錯誤的包交給從SessionManager得到的Session,廣播交給MulticastRouter,給其餘人的包交給RoutingTable(錯誤也路由給本身),剩下的交給IQHandler(根據包裏的namespace找到惟一的處理者)。
c) PresenceRouter:RoutingTable(路由)、MulticastRouter(廣播)、SessionManager(出錯)、PresenceManager(探測)、PresenceUpdateHandler(更新)、PresenceSubscribeHandler(訂閱)。
d) MessageRouter:RoutingTable、MulticastRouter、SessionManager、UserManager(判斷註冊)、OfflineMessageStrategy(保存留言)。
e) 關鍵類的理解:
i. ClientConnectionHandler:負責監聽IoSession的創建、收發消息和關閉,而且構建Conection和StanzaHandler,收到的消息交給後者,經過前者發送消息。
ii. NIOConnection:保存了表示與用戶之間鏈接的IoSession,經過它發送消息給用戶,或者使用PacketDeliver轉發消息做爲離線留言存儲;它一般被Session使用。
iii. ClientStanzaHandler:先創建Session(最終是SessionManager建立並注入Connection),收到的消息交給PacketRouter處理。
iv. LocalClientSession:保存用戶信息(IQAuthHandler處理登陸),設置用戶狀態,給用戶發送消息,由SessionManager統一管理。
f) 路由功能類:
i. MulticastRouter:廣播發送給服務器且有addresses元素的包。
ii. RoutingTableImpl:routePacket轉發消息給user、component、server。
iii. IQHandler:處理IQ包。IQAuthHandler處理用戶登陸,IQBindHandler處理資源綁定,
iv. PresenceUpdateHandler:經過Session設置用戶狀態。
v. PresenceSubscribeHandler:處理狀態訂閱包。
g) 管理者類:
i. RosterManager:管理Roster,每一個花名冊能夠廣播用戶狀態給好友。
ii. PrivacyListManager:管理PrivacyList,若是不阻止聯繫人就發給他狀態,使用PrivacyListProvider從數據庫加載隱私列表。
iii. UserManager:管理或建立User,更改密碼,使用UserProvider從數據庫加載用戶信息。
iv. PresenceManager:管理用戶最後活動狀態,用戶上下線狀態信息。
v. GroupManager:使用GroupProvider管理用戶組。
vi. VCardManager:使用VCardProvider管理用戶名片。
h) 工廠類:
i. AuthFactory:可配AuthProvider,驗證用戶登陸、得到並加解密用戶密碼,登陸後會告訴UserManager經過UserProvider加載User。
i) 其餘類:
i. AdminConsole:得到程序名稱和版本,添加刪除模塊。
邏輯簡要:
ConnectionManagerImpl做爲最後一個模塊被加載、初始化和啓動,它使用mina-core.jar中的SocketAcceptor、IoSession、IoHandler等處理底層通信。ClientConnectionHandler是個IoHandler,它監聽用戶鏈接請求並用打開的IoSession創建NIOConnection(它調用IoSession發消息給用戶)和ClientStanzaHandler,後者經過SessionManager爲用戶創建LocalClientSession並注入NIOConnection,而從用戶收到的Packet則讓PacketRouter轉發給IQRouter、PresenceRouter和MessageRouter,出錯信息可能由Sesssion處理後交給Connection返回給用戶,處理成功則讓RoutingTableImpl路由給接受者,IQAuthHandler處理用戶登陸認證的包Authentication而後設置Session的狀態爲已認證,廣播包由MulticastRouter處理,查詢包由相應名稱空間的IQHandler處理,狀態包由PresenceUpdateHandler和PresenceSubscribeHandler處理,消息包通常由RoutingTable的routePacket路由給接收者的Session,若是接收者沒有登陸則返回給MessageRouter的routingFailed,它調用OfflineMessageStrategy保存爲離線消息。
數據庫