关于WebSocket学习记录(三)
2021-04-21 13:29
标签:发送 opcode 服务 nbsp soc 发送消息 进制 断开连接 处理 一旦WebSocket客户端、服务端建立连接后,后续的操作都是基于数据帧的传递。 WebSocket根据 WebSocket的每条消息可能被切分成多个数据帧。当WebSocket的接收方收到一个数据帧时,会根据 FIN=1表示当前数据帧为消息的最后一个数据帧,此时接收方已经收到完整的消息,可以对消息进行处理。FIN=0,则接收方还需要继续监听接收其余的数据帧。 此外, 直接看例子更形象些。下面例子来自MDN,可以很好地演示数据的分片。客户端向服务端两次发送消息,服务端收到消息后回应客户端,这里主要看客户端往服务端发送的消息。 第一条消息 FIN=1, 表示是当前消息的最后一个数据帧。服务端收到当前数据帧后,可以处理消息。opcode=0x1,表示客户端发送的是文本类型。 第二条消息 WebSocket为了保持客户端、服务端的实时双向通信,需要确保客户端、服务端之间的TCP通道保持连接没有断开。然而,对于长时间没有数据往来的连接,如果依旧长时间保持着,可能会浪费包括的连接资源。 但不排除有些场景,客户端、服务端虽然长时间没有数据往来,但仍需要保持连接。这个时候,可以采用心跳来实现。 ping、pong的操作,对应的是WebSocket的两个控制帧, 举例,WebSocket服务端向客户端发送ping,只需要如下代码(采用 关于WebSocket学习记录(三) 标签:发送 opcode 服务 nbsp soc 发送消息 进制 断开连接 处理 原文地址:https://www.cnblogs.com/ybniu/p/12248637.html数据传递:
opcode
来区分操作的类型。比如0x8
表示断开连接,0x0
-0x2
表示数据交互。1、数据分片
FIN
的值来判断,是否已经收到消息的最后一个数据帧。opcode
在数据交换的场景下,表示的是数据的类型。0x01
表示文本,0x02
表示二进制。而0x00
比较特殊,表示延续帧(continuation frame),顾名思义,就是完整消息对应的数据帧还没接收完。2、数据分片例子
连接保持+心跳:
opcode
分别是0x9
、0xA
。ws
模块)
文章标题:关于WebSocket学习记录(三)
文章链接:http://soscw.com/index.php/essay/77629.html