【译】 WebSocket 协议第六章——发送与接收消息(Sending and Receiving Data)
概述
本文为 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 节中说的那样,服务端在收到客户端的数据帧时必须去除掩码。
【译】 WebSocket 协议第六章——发送与接收消息(Sending and Receiving Data)相关推荐
- 【译】 WebSocket 协议第十一章——IANA 注意事项(IANA Considerations)
概述 本文为 WebSocket 协议的第十一章,本文翻译的主要内容为 WebSocket 的 IANA 相关注意事项. IANA 注意事项(协议正文) 11.1 注册新 URI 协议 11.1.1 ...
- 【译】WebSocket协议第四章——连接握手(Opening Handshake)
概述 本文为WebSocket协议的第四章,本文翻译的主要内容为WebSocket建立连接开始握手的内容,主要包含了客户端和服务端握手的内容,以及双方如何处理相关字段和逻辑. 4 开始握手(协议正文) ...
- java-UDP协议实现数据的发送和接收
实现发送端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; im ...
- springboot websocket发送和接收消息代码资源下载
客户端发送给服务端的消息,同时接收服务端响应给客户端的消息: 服务端收到客户端发送过来的消息,并响应给客户端消息:
- ActiveMQ 发送和接收消息
一.添加 jar 包 <dependency><groupId>org.apache.activemq</groupId><artifactId>act ...
- SpringAMQP发送与接收消息
同步调用的优点:时效性较强,可以立即得到结果 同步调用的问题: 1.耦合度高 2.性能和吞吐能力下降 3.有额外的资源消耗 4.有级联失败问题 异步通信的优点: 1.耦合度低 2.吞吐量提升 3.故障 ...
- java mqtt客户端_java 实现mqtt发送和接收消息客户端具体用法及测试代码
注:客户端代码实现请看我的上一篇 1mqtt发送消息 发送时不用多讲,每次发送肯定需要运行一次发送消息方法 MyMqttClient mqttClient = new MyMqttClient(); ...
- 通过kafka发送和接收消息
生产者配置类: @Configuration @EnableKafka public class KafkaProducerConfig {@Value("${kafkaConfig.add ...
- Android Wear 进阶 - 4 发送和同步数据 Sending and Syncing Data
首先要注意的是Layer 是层的意思.Layout 是布局的意思.所以Data Layer 是数据层的意思. 第一部分:总述: 手表端有4种类型和数据层相关的: Data Item(数据项):限制10 ...
最新文章
- Windows Terminal 1.0 正式发布
- 【Matlab 控制】Simulink仿真+S函数例子
- if something reaches the top
- 浮动div中的图片垂直居中
- Java 疑问自问自答
- 微信小程序python人工智能回复_用python itchat写一个微信机器人自动回复
- redhat 5.4 搭建本地YUM源
- 古代汉语(王力版)笔记 通论8-9
- 计算几何模板(kuangbin)
- AD域权限分配_ADManager Plus对AD域管理有哪些帮助作用?
- 启动Xshell报错:由于找不到MSVCR110.dll,无法继续执行代码。重新安装程序可能会解决此问题
- string entitlement = Application.dataPath+ “/Editor/Entitle Unity工程到处iOS工程,用脚本把Push Notifications打开
- 亮相SIGGRAPH 太极拳三维教学App制作揭秘
- 网页播放全景视频和全景图片
- Android ——XML布局实现桌面台球的开始界面
- 新版股票api接口大全
- bootstrap实现手风琴功能(树形列表)
- 2 java基础知识+数据结构
- ROS学习笔记74(TF Using Stamped datatypes with tf::MessageFilter)
- Adobe国际认证证书,如何为“女性”创造,职业发展机会!