- 摘要
本文介绍了Session和Transport模块。
- 概述
Session、SessionClient、Transport和TransportChannel的关系如下图所示:
- 模块解析
- SessionClient
- SessionManager中,按content_type来区分不同的SessionClient,且两端的content_type必须一样。
- 需要用户实现自己的SessionClient和content_type,并且在初始化的时候添加到SessionManager中,方便创建Session。
- 接收端,可以等待请求端的消息,实现接收端的Session生命周期管理。
- Session
- sid由SessionManager创建,两端对应的sid是一样的。
- 请求端,创建Session时,多个Session可以绑定同一个SessionClient。
- 接收端,安照sid和from(请求端的full jid)来查找对应的Session。若Session不存在,先查看对应content_type的SessionClient是否存在,然后创建过程同请求端。
- Transport
- 在Session中,用TransportProxy包装,以content_name区分。
- 默认的实现是P2PTransport,没必要直接使用它。
- TransportChannel
- 包含在Transport中,用channel_name区分。
- 通过Session创建,需要指定content_name和channel_name(即在content_name的Transport下创建channel_name的TransportChannel)。
- 继承于TransportChannel是TransportChannelImpl,TransportChannel的一个默认具体实现是P2PTransport。
- SessionManager
- 未在图中表示。它只是一个辅助类,用来创建Session,将Session和SessionClient绑定。
- SessionClient