6

我试图从我的服务器人为地向我的客户端发送一个关闭数据包,我应该发送什么原始值以便客户端了解我正在关闭连接?websocket协议之间有区别吗?

4

1 回答 1

8

在最简单的级别 - 只需关闭连接- 就可以正常工作。

非常早期的 hixie-76 有一个简单的信号关闭序列:只需发送两个字节 0xFF、0x00(第一个是帧类型,第二个是长度)。

在所有后来的规范中,帧都稍微复杂一些。它们分为:

  • (1 字节)标志和操作码
  • (可变字节数)掩码标志和有效负载长度
  • (可选,4 字节)掩码
  • ({length} 字节)有效载荷

对于第一部分,我们想要的操作码是 0x08,它必须与“fin”标志 0x80 组合(这只是表示帧没有被拆分为多个消息) - 所以是 0x88。

对于第二部分,我们可以使用零长度消息,但是我们需要知道我们是客户端到服务器(总是被屏蔽,所以我们需要使用 0x80)还是服务器到客户端(从不被屏蔽,所以我们需要使用 0x00)。

第三部分仅在设置了掩码标志时才包含,因此客户端到服务器;因为我们没有发送有效载荷,所以发明加密安全掩码没有意义——我们可以只使用 0x00 0x00 0x00 0x00。

第四个被省略,因为我们说的是零长度。

所以:客户端到服务器:0x88 0x80 0x00 0x00 0x00 0x00

服务器到客户端:0x88 0x00

于 2013-06-18T19:22:10.547 回答