连接会话模型是本系统的重要对象模型,也是很多其它同类系统的基础,如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
Blog: http://my.oschina.net/happydcarrot/