2.4 结束会话
常量定义
- goaway code
- 0: 会话正常关闭
- 1: 会话错误
- 2: 会话过期
关闭会话
过期
间隔一段时间扫描所有已创建的 Session 列表,检查 Session 的最近活跃时间,如果超过预先定义的过期时间,则关闭该会话,清理所有占用的资源,通知上层应用程序 Session 已经goaway。
异常关闭
当客户端或者服务端收到帧数据时,如果帧数据所属 Session 已关闭或不存在,则出现会话错误。检查对方发来的帧格式,如果不是 goway 帧,则回复对方 goaway 帧,告知会话不存在,对方需要关闭此依次会话。当对方收到 goway 帧后,需立刻关闭会话并通知上层应用程序。
正常关闭
当应用程序关闭时,需要关闭所有会话,清理占用的资源。如果是客户端关闭,需要向服务端发送一个 goaway 帧,服务端收到该 goaway 帧后,需立刻关闭会话并通知上层应用程序。
goaway 帧格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
| [id from client] | [id from server] |
+-------------------------------+-------------------------------+
| timestamp ... |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| ... timestamp [curent time] |
+-+-+-+-----+-+-+-------+-------+-------------------------------+
|S|P|F| RSV |S|F| RSV |OPCODE | Payload len |
|T|A|R| [0] |L|I| [0] |[0xC] | [1] |
|R|C|A| |O|N| | | |
|E|K|G| |W| | | | |
|0|0|0| |0|0| | | |
+-+-+-+-----+-+-+-------+-------+-------------------------------+
|Payload [code] |
+---------------+
OPCODE 字段写入 0xC,Payload 字段写入上方预先定义的关闭会话 code,Payload len 写入 1。当收到 goaway 帧后,需立刻关闭当前会话,并通知上层应用程序。