Session 会话
通常我们所说的会话是两个或更多个通信设备之间或计算机和用户之间的半永久性交互式信息交换, 会话在某个时间点建立,然后在稍后的时间点拆除。
建立的通信会话可以在每个方向上涉及多于一个消息, 这些消息只存在这个会话中, 而与其他会话隔离.
会话通常是有状态的,这意味着至少一个通信部分需要保存关于会话历史的信息以便能够进行通信,这与无状态通信相反,其中通信由具有响应的独立请求组成。
而状态保存在什么地方, 有很多选择, 内存中, 磁盘上, 共享缓存中, 数据库里, 总有一款适合你.
常见的会话就有 TCP Session, SIP Session , RTP Session , HTTP Session 等等, 分别工作在传输层, 会话层和应用层
TCP Session
这个自不必说, 用三次握手建立会话, 四次挥手终止会话
-
三次握手
-
四次挥手
这样在连接的两端就建立了一个 TCP Session, 并且维护着会话状态
SIP/RTP Session
SIP是一种应用层控制协议,可以建立,修改和终止多媒体会话(会议),例如互联网电话呼叫,多媒体分发播放和多媒体会议。它在TCP 或 UDP 之上通过 INVITE 消息来搭建用户代理之间的信令(控制 - SIP Session) 和媒体会话 (RTP Session)
这里不做赘述, 请见微服务协议之 SIP
更多细节见 RFC
- RFC3261(tools.ietf.org/html/rfc326…): SIP: Session Initiation Protocol
- RFC3550(tools.ietf.org/html/rfc355…): RTP: A Transport Protocol for Real-Time Applications
- RFC7329(tools.ietf.org/html/rfc732…): A Session Identifier for the Session Initiation Protocol (SIP)
整理了一份面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题
需要全套面试笔记的【点击此处即可】即可免费获取
Http Session
这里重点讲讲 HTTP Session, 传统 Web 应用里都有一个 session 的概念,相比用 Cookie 在客户端记录信息确定用户身份, Session 一般是在服务器端记录信息确定用户身份和状态, 这里的状态不仅指用户登录和在线的状态, 也包括应用层中的一些业务相关的信息, 比如很多网站的购物车就是放在 Http Session 里的.
在分布式系统中, 通常不建议将会话状态放在一台服务器的内存或磁盘中, 因为这样的话, 系统会有单点失败而导致的服务不