资讯专栏INFORMATION COLUMN

【译】 WebSocket 协议第六章——发送与接收消息(Sending and Receiving

BenCHou / 3094人阅读

摘要:概述本文为协议的第六章,本文翻译的主要内容为消息发送与接收相关内容。在这一帧中的应用数据被定义为消息的数据。接下来的数据帧必须是属于一条新的消息。像第节中说的那样,服务端在收到客户端的数据帧时必须去除掩码。

概述

本文为 WebSocket 协议的第六章,本文翻译的主要内容为 WebSocket 消息发送与接收相关内容。

发送与接收消息(协议正文) 6.1 发送数据

为了通过 WebSocket 连接发送一条 WebSocket 消息,终端必须遵循以下几个步骤:

终端必须保证 WebSocket 连接处于 OPEN 状态(见第 4.1 节和第 4.2.2 节)。如果 WebSocket 连接的任意一端的状态发生了改变,终端必须中止以下步骤。

终端必须将数据按照第 5.2 节定义的 WebSocket 帧进行封装。如果需要发送的数据过大或者在终端希望开始发消息时,如果数据在整体性这一点上不可用,那么终端可能会选择通过在第 5.4 节中定义的一系列帧来进行封装。

包含数据的第一帧操作码(帧操作码)必须根据第 5.2 节中的内容设置的合适的值,以便接收者将数据解析为文本或者二进制数据。

最后一个包含数据的帧的 FIN ( FIN 帧)字段必须和第 5.2 节中定义的一样设置为 1 。

如果数据被发送到了客户端,数据帧必须和第 5.3 节中定义的一样添加掩码。

如果在 WebsSocket 连接中有协商扩展(第 9 章),在这些扩展中的定义和注意事项也许要额外考虑。

被格式化的帧必须通过底层的网络连接进行传输。

6.2 接收数据

为了接收 WebSocket 数据,终端需要监听底层网络连接。输入的数据必须通过第 5.2 节定义的 WebSocket 帧进行解析。如果收到了一个控制帧(第 5.5 节),那么这个帧必须如 5.5 节中定义的方式进行处理。如果收到的是一个数据帧,那么终端必须注意 5.2 节中的定义在操作码(帧操作码)中的数据类型。在这一帧中的“应用数据”被定义为消息的数据。如果帧中包含未分片的数据(第 5.4 节),那么就认为:一条 WebSocket 消息的数据和类型被收到了。如果帧是分片数据的一部分,那么随后的帧包含的“应用数据”连起来就是数据的格式。当通过 FIN 字段(FIN帧)表示的最后一个片段被收到时,我们可以说:一条 WebSocket 消息的数据(由片段组装起来的“应用数据”数据组成)和类型(注意分片消息的第一帧)已经被收到了。接下来的数据帧必须是属于一条新的 WebSocket 消息。

扩展(第 9 章)可能改变数据如何理解的方式,具体包括消息的内容边界。扩展,除了在“应用数据”之前添加“扩展数据”之外,也可以修改“应用数据”(例如压缩它)。

像第 5.3 节中说的那样,服务端在收到客户端的数据帧时必须去除掩码。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101912.html

相关文章

  • WebSocket 协议 RFC 文档(全中文翻

    摘要:概述经过半年的捣鼓,终于将协议全篇翻译完成。现在将所有章节全部整理到一篇文章中,方便大家阅读。如果大家想看具体的翻译文档,可以去我的中查看。大家有相关类型的需要,建议大家可以尝试下。 概述 经过半年的捣鼓,终于将 WebSocket 协议(RFC6455)全篇翻译完成。现在将所有章节全部整理到一篇文章中,方便大家阅读。如果大家想看具体的翻译文档,可以去我的GitHub中查看。 具体章节...

    ghnor 评论0 收藏0
  • []RabbitMQ tutorials (一)[JavaScript]

    摘要:允许接收和转发消息。一个等待接收消息的程序是一个消费者。发送者会先连接到发送一条消息,然后退出。注意这里的是要和之前的名称一致。翻译日期另因为想入门第一次想着翻译,第一次然后希望多多提出不足。 gitBook https://joursion.gitbooks.io/... Title: RabbitMQ tutorials ---- Hello World (Javascript) ...

    BlackHole1 评论0 收藏0
  • 用 Node 实现简单 WebSocket 协议

    摘要:用实现简单协议从浏览器说起浏览器提供的非常简洁。创建连接连接建立时的回调收到消息时的回调连接出错时的回调连接终止时的回调发送消息告诉我们也就是说,在创建对象时,浏览器尝试与服务端建立连接发送请求建立个服务端一旦收到数据,就会触发。 用 Node 实现简单 WebSocket 协议 从浏览器 WebSocket API 说起 浏览器提供的 WebSocket API 非常简洁。 let...

    chavesgu 评论0 收藏0
  • 慕课网_《Netty入门之WebSocket初体验》学习总结

    时间:2018年04月11日星期三 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:https://github.com/zccodere/s... 学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 什么是Netty 高性能、事件驱动、异步非阻塞的IO Java开源框架 基于NIO的客户...

    Noodles 评论0 收藏0
  • WebSocket协议第五章——数据帧(Data Framing)

    摘要:概述本文为协议的第五章,本文翻译的主要内容为传输的数据相关内容。注意无论协议是否使用了,帧都需要添加掩码。服务端收到没有添加掩码的数据帧以后,必须立即关闭连接。服务端禁止在发送数据帧给客户端时添加掩码。基础数据帧协议通过进行了正式的定义。 概述 本文为WebSocket协议的第五章,本文翻译的主要内容为WebSocket传输的数据相关内容。 有兴趣了解该文档之前几张内容的同学可以见: ...

    nevermind 评论0 收藏0

发表评论

0条评论

BenCHou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<