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 帧后,需立刻关闭当前会话,并通知上层应用程序。