6.发送和接收数据——WebSocket协议翻译

6.1.发送数据

为了_发送一个WebSocket消息_,其中包括WebSocket连接之上的/data/,端点必须执行以下步骤。

  1. 端点必须确保WebSocket连接处于OPEN状态(比较 4.1节和4.2.2节)。如果在任何时刻WebSocket连接的状态改变了,端点必须终止以下步骤。

  2. 端点必须封装/data/到定义在5.2节的一个WebSocket帧。如果要发送的数据太大或如果在端点想要开始发生数据时数据作为一个整体不可用,端点可以按照5.2节的定义交替地封装数据到一系列的帧中。

  3. 第一个包含数据的帧的操作码(帧-opcode)必须按照5.2节的定义被设置为适当的值用于接收者解释数据是文本还是二进制数据。。

  4. 包含数据的最后帧的FIN位(帧-fin)必须按照5.2节的定义设置位1。

  5. 如果数据正由客户端发送,帧必须按照5.3节的定义被掩码。

  6. 如果任何扩展(第9章)已经协商用于WebSocket连接,额外的考虑可以按照这些扩展定义来应用。

  7. 已成形的帧必须在底层网络连接之上传输。

6.2.接收数据

为了接收WebSocket数据,端点监听底层网络连接。传入数据必须按照5.2节的定义解析为WebSocket帧。如果接收到一个控制帧(5.5节),帧必须按照5.5节定义的来处理。当接收到一个数据帧(5.6节)时,端点必须注意5.2节由操作码(帧-opcode)定义的数据的/type/。这个帧的“应用数据”被定义为消息的/data/。如果帧由一个未分片的消息组成(5.4节),这是说_已经接收到一个WebSocket消息_,其类型为/type/且数据为/data/。如果帧是一个分片消息的一部分,随后数据帧的“应用数据”连接在一起形成/data/。当接收到由FIN位(帧-fin)指示的最后的片段时,这是说_已经接收到一个WebSocket消息_,其数据为/data/(由连续片段的“应用数据”组成)且类型为/type/(分配消息的第一个帧指出)。随后的数据帧必须被解释为属于一个新的WebSocket消息。

扩展(第9章)可以改变数据如何读的语义,尤其包括什么组成一个消息的边界。扩展,除了在负载中的“应用数据”之前添加“扩展数据”外,也可以修改“应用数据”(例如压缩它)。

服务器必须按照5.3节的定义为从客户端接收到的数据帧移除掩码。

相关推荐