概述

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

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

6.1 发送数据

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

  1. 终端必须保证 WebSocket 连接处于 OPEN 状态(见第 4.1 节和第 4.2.2 节)。如果 WebSocket 连接的任意一端的状态发生了改变,终端必须中止以下步骤。
  2. 终端必须将数据按照第 5.2 节定义的 WebSocket 帧进行封装。如果需要发送的数据过大或者在终端希望开始发消息时,如果数据在整体性这一点上不可用,那么终端可能会选择通过在第 5.4 节中定义的一系列帧来进行封装。
  3. 包含数据的第一帧操作码(帧操作码)必须根据第 5.2 节中的内容设置的合适的值,以便接收者将数据解析为文本或者二进制数据。
  4. 最后一个包含数据的帧的 FIN ( FIN 帧)字段必须和第 5.2 节中定义的一样设置为 1 。
  5. 如果数据被发送到了客户端,数据帧必须和第 5.3 节中定义的一样添加掩码。
  6. 如果在 WebsSocket 连接中有协商扩展(第 9 章),在这些扩展中的定义和注意事项也许要额外考虑。
  7. 被格式化的帧必须通过底层的网络连接进行传输。

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)相关推荐

  1. 【译】 WebSocket 协议第十一章——IANA 注意事项(IANA Considerations)

    概述 本文为 WebSocket 协议的第十一章,本文翻译的主要内容为 WebSocket 的 IANA 相关注意事项. IANA 注意事项(协议正文) 11.1 注册新 URI 协议 11.1.1 ...

  2. 【译】WebSocket协议第四章——连接握手(Opening Handshake)

    概述 本文为WebSocket协议的第四章,本文翻译的主要内容为WebSocket建立连接开始握手的内容,主要包含了客户端和服务端握手的内容,以及双方如何处理相关字段和逻辑. 4 开始握手(协议正文) ...

  3. java-UDP协议实现数据的发送和接收

    实现发送端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; im ...

  4. springboot websocket发送和接收消息代码资源下载

    客户端发送给服务端的消息,同时接收服务端响应给客户端的消息: 服务端收到客户端发送过来的消息,并响应给客户端消息:

  5. ActiveMQ 发送和接收消息

    一.添加 jar 包 <dependency><groupId>org.apache.activemq</groupId><artifactId>act ...

  6. SpringAMQP发送与接收消息

    同步调用的优点:时效性较强,可以立即得到结果 同步调用的问题: 1.耦合度高 2.性能和吞吐能力下降 3.有额外的资源消耗 4.有级联失败问题 异步通信的优点: 1.耦合度低 2.吞吐量提升 3.故障 ...

  7. java mqtt客户端_java 实现mqtt发送和接收消息客户端具体用法及测试代码

    注:客户端代码实现请看我的上一篇 1mqtt发送消息 发送时不用多讲,每次发送肯定需要运行一次发送消息方法 MyMqttClient mqttClient = new MyMqttClient(); ...

  8. 通过kafka发送和接收消息

    生产者配置类: @Configuration @EnableKafka public class KafkaProducerConfig {@Value("${kafkaConfig.add ...

  9. Android Wear 进阶 - 4 发送和同步数据 Sending and Syncing Data

    首先要注意的是Layer 是层的意思.Layout 是布局的意思.所以Data Layer 是数据层的意思. 第一部分:总述: 手表端有4种类型和数据层相关的: Data Item(数据项):限制10 ...

最新文章

  1. Windows Terminal 1.0 正式发布
  2. 【Matlab 控制】Simulink仿真+S函数例子
  3. if something reaches the top
  4. 浮动div中的图片垂直居中
  5. Java 疑问自问自答
  6. 微信小程序python人工智能回复_用python itchat写一个微信机器人自动回复
  7. redhat 5.4 搭建本地YUM源
  8. 古代汉语(王力版)笔记 通论8-9
  9. 计算几何模板(kuangbin)
  10. AD域权限分配_ADManager Plus对AD域管理有哪些帮助作用?
  11. 启动Xshell报错:由于找不到MSVCR110.dll,无法继续执行代码。重新安装程序可能会解决此问题
  12. string entitlement = Application.dataPath+ “/Editor/Entitle Unity工程到处iOS工程,用脚本把Push Notifications打开
  13. 亮相SIGGRAPH 太极拳三维教学App制作揭秘
  14. 网页播放全景视频和全景图片
  15. Android ——XML布局实现桌面台球的开始界面
  16. 新版股票api接口大全
  17. bootstrap实现手风琴功能(树形列表)
  18. 2 java基础知识+数据结构
  19. ROS学习笔记74(TF Using Stamped datatypes with tf::MessageFilter)
  20. Adobe国际认证证书,如何为“女性”创造,职业发展机会!

热门文章

  1. Dagger2 在 Android 项目的正确使用方式【完整篇】
  2. Chrome MessageLoop类分析
  3. C++和Java中成员数据名和成员函数名的冲突问题
  4. View Animation
  5. 2016年华为网络技术精英大赛复赛试题
  6. Qt入门之常用qt控件认知之QLabel
  7. CI框架源码阅读笔记4 引导文件CodeIgniter.php
  8. 2014年,马上要上班啦,希望一切顺利
  9. 大道至简读书笔记02
  10. 20189320《网络攻防》第一周作业