openfire的配置和邏輯簡要



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保存爲離線消息。

數據庫

相關文章
相關標籤/搜索