session一般出现在计算机领域,IM软件中的session,老的IM有两层:首先是逻辑层的session来管理会话的参与者,消息列表,会话类型等等;还有协议层的session,主要是代表客户端跟服务器的一个事物通道。
老的IM软件
客户端跟Server交互的每一类操作都是基于会话。比如客户端登录,需要建立一个登录的会话;客户端发消息,需要建立一个会话。下面举例:
客户端向Server发了一条消息,这条消息的发送就建立在会话之上。客户端需要下面几个步骤。
1. 创建一个session ID=1,
2. 发第一条消息的sequence id=1,第二条消息sessionID仍是1,但是sequence ID=2以此类推,同一个联系人建立的sessionID不变,sequenceID跟着消息的数量递增。
3. 消息发送完成后,关闭session。
客户端发送完消息,需要Server的回执,所以sessionID+sequenceID组成唯一的标识,可以找到发送的这条消息,更新UI的显示。
上面的场景就是所谓的【会话内】消息,主要是发给在线联系人,Server做了特殊处理,这样的消息可以很快速的到达对方。有了会话内,就有【会话外】:会话外指的是:不需要建立会话,直接发送给对,Server会存储下来等到对方下次上线再发送。
很明显,会话外的逻辑要比回话外的简单得多!
现状
现代的IM软件应该都是所谓的会话外了,没有协议层的session的概念了,只有逻辑层的session。
现代的协议更聪明了,每一个消息都有一个messageID,这样的话。会话的概念就不存在了,客户端-服务器之间只有一个socket网络层面的会话了。
附一张IM软件的层次图
protocol.a是一个简写,其实是一个核心的库,负责协议层的解析和管理。
浅谈IM软件业务知识—会话session的概念,附一张IM软件的层次图