鏈接會話模型是本系統的重要對象模型,也是不少其它同類系統的基礎,如HTTP應用服務器,它們都是有類似的會話概念來實現表明在線用戶。沒有鏈接、會話這模型就不能實現數據包的路由和用戶鏈接的擴展,也就實現不了伸縮性。其中鏈接主要是用於保存和用戶有關的網絡鏈接數據,會話主要是用於保存和用戶有關的業務數據,鏈接、會話之間是有關連的。 服務器
系統對鏈接、會話進行了抽象,分別實現了非鏈接管理器的類和鏈接管理器的類,如下是會話和鏈接接口的定義。
Session接口定義了:JID、StreamID、會話狀態、建立時間、最後活約時間、客戶端發送包計數、服務端發送包數、關閉會話、發送包。ClientSession接口繼承自Session接口,定義了:活約列表、默認列表、獲取用戶名、可否洪水發送落線信息、是否匿名、是否在線、衝突計數。
Connection接口定義了:鏈接的特性,包括客戶端的ip,主機名、是否Flash客戶端、使用的壓縮協議、TLS協議、XMPP版本、註冊關閉鏈接監聽、發送數據包。
ioSession、Connection、Session的關係是一個鏈接對象會引用一個ioSession來實現數據包的發送,鏈接和會話之間相互引用。這是鏈接會話模型的頂層抽象,在使用鏈接管理器和無使用鏈接管理器下,分別對Connection和Session作了不一樣的實現,在非鏈接管理下能過NIOConnection類實現了Connection,LocalClientSession類實現了Session。在鏈接管理器下經過VirtualConnection擴展了Connection接口,在經過ClientSessionConnection類實現,經過ConnectionMultiplexerSession擴展了LocalSession,在經過LocalConnectionMultiplexerSession實現。 網絡
Author: 紅蘿蔔OO app
Blog: http://my.oschina.net/happydcarrot/ .net