WebSocket数据帧和各种操作码

本文详细介绍了WebSocket协议中操作码的功能及使用方式,包括文本传输、二进制数据处理及连接控制等方面的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1这个操作码(Opcode)来传输文本的。没错,1这个操作码就是传输文本(UTF-8)的。在分片过程中把操作码设置为0,0也只是分片时用的。操作码是4位的,取值当然不止这两个,除了指定传输数据类型外还有其它用途的操作码。
   规范文档中也提供了一个表格

 

 opcode Meaning 描述 Reference
 0XXXXXXX 数据帧 字节的最高位bit为0 
 0 Continuation Frame  RFC 6455
 1 Text Frame 文本(UTF-8)数据 RFC 6455
 2 Binary Frame 二进制数据 RFC 6455
 3-7  保留 
 1XXXXXXX 控制帧 字节的最高位bit为1 
 8 Connection Close Frame 服务器向客户端请求结束当前连接 RFC 6455
 9 Ping Frame 服务器向客户端发送一个Ping帧 RFC 6455
 10 Pong Frame 客户端返回给服务器端一个Pong帧 RFC 6455
 11-15  保留 

 

   目前就这么多个操作码被定义,其它都是预留的。0和1这两个之前的例子用过的就不说了。

  2这个操作码是告诉服务器不要把数据转换成字符串,直接当做二进制数据来用。这会在传输图片之类的操作中用到,至于传输图片的例子以后再给吧。这篇主要是介绍后三个操作码。

  8这个操作码是服务器向客户端请求结束当前连接用的,不要以为这很简单,WebSocket的建立连接需要握手协议,那么关闭也需要双方的协商,还有关闭的代码什么的,总之很麻烦,下回再介绍。

  9和10这两个状态码就简单些了,它们是成对的。服务器向客户端发送一个Ping帧时客户端会自动返回一个Pong帧,并且数据部分与发送的完全相同。如果不同或收不到,则说明网络有问题。

转载于:https://www.cnblogs.com/hadesbingbing/p/6393927.html

### WebSocket 数据传输协议的工作原理 WebSocket 是一种基于 TCP 的全双工通信协议,允许客户端服务器之间建立持久连接并实现实时数据交换。其工作原理可以分为以下几个方面: #### 连接初始化 在 WebSocket 协议中,初始握手过程通过 HTTP 请求完成。当客户端发起请求时,会发送一个带有 `Upgrade` 头部字段的特殊 HTTP 请求到目标服务器,表明希望升级当前连接至 WebSocket 协议[^2]。 一旦服务器同意此请求,则返回状态码 101 (Switching Protocols),表示成功切换为 WebSocket 长连接模式。此时双方进入真正的 WebSocket 数据帧交互阶段[^1]。 #### 数据帧结构 WebSocket 使用二进制帧来封装消息,在单次传输过程中可能由多个连续的数据片段组成。每个数据帧都具有固定的头部格式用于描述该帧的具体属性以及负载内容长度等信息。 对于文本型的消息来说,默认采用 UTF-8 编码;而对于二进制形式则直接传递原始字节流给对方处理解析即可。 #### 子协议支持 为了满足不同类型应用程序之间的互操作性要求,WebSocket 提供了一种扩展机制——即所谓的 “子协议”。这些自定义规则能够在不改变基础架构的前提下调整实际使用的语义表达方式或序列化方法。 例如 JSON-RPC 可能被指定作为一个有效的子协议选项之一,这样就可以确保所有参与者遵循相同的编码标准来进行远程调用服务的操作了。 --- ### WebSocket 的主要用途 由于具备低延迟特性加上简单易用的优势特点,因此广泛应用于各种需要频繁更新或者即时反馈响应的服务领域当中: 1. **在线聊天室**: 用户间可以直接相互收发文字图片等内容而无需轮询刷新页面。 2. **股票行情展示系统**: 实现毫秒级精度的价格变动推送通知功能。 3. **多人协作编辑工具**: 支持多终端同步修改文档内容的功能实现。 4. **网络游戏框架构建**: 减少玩家动作指令提交后的等待时间提高整体流畅度体验效果明显优于传统短链接方案。 ```javascript // 创建一个新的 WebSocket 对象实例并与指定 URL 地址建立联系 const socket = new WebSocket('wss://example.com/socket'); socket.onopen = function() { console.log("Connection established"); }; socket.onmessage = function(event) { const message = event.data; console.log(`Received data from server: ${message}`); }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值