聊聊websocket opcode中的text / binary模式

webscoket 协议中有一个非常有意思的设计,在opcode内,对帧类型进行了区分:文本和二进制流。但这个区分并没有规定文本类型有类似于http协议中空行表示结束的说法,而且长度也是由帧头记录,也就是说,单纯从协议格式上来讲,这个区分,没有任何实际的含义。RFC6455只是规定了如果采用文本帧,就必须用UTF8来编码,如果采用数据帧,则完全由应用程序来解释。这也许是为了给未知来源的文本帧提供了某种解读方式。

这种最大程度的向下兼容性在我看来,有点过于啰嗦,帧类型其实与子协议强相关。怎么解读帧都是应用层的事情,用什么格式来理解帧的内容,不就是subprotocol干的事情吗?不知道如何解析或如何使用的文本帧,除了浪费服务器的带宽之外,没有任何作用。而且在设计中,这个文本或则二进制帧的opcode也成了一个比较麻烦的障碍,应用层发送数据难道还需要根据websocket的实现所规定的帧类型进行编码?这儿应该有更方便,或则说更直接的方式来处理,理清楚思路之后,我决定将opcode交给应用层来处理,应用层必须注册 subprotocol,提供具体的帧解析的接口,握手的时候,如果没有指定subprotocol,那就采用一个通用的dummy来处理帧。而发送数据时,必须由subprotocol来决定使用文本还是二进制帧操作码,当接收到数据时,也必须将操作码和数据一起交给subprotocol来处理。websocket的实现本身对此不作任何干预。

相关推荐
余生皆假期-14 小时前
IIC 通讯详解——以 OSI 模型分析 物理层、数据链路层和应用层
网络
李辉200315 小时前
Python逻辑运算符
java·网络·python
平凡而伟大(心之所向)15 小时前
TCP Socket(TCP 套接字)和 WebSocket 区别详解
websocket·网络协议·tcp/ip
火车叨位去194915 小时前
计算机网络R2025秋(TYUT)【计算机网络】第5章 运输层
网络·tcp/ip·计算机网络
huangql52015 小时前
HTTP协议与WebSocket完整技术指南
websocket·网络协议·http
打不了嗝 ᥬ᭄18 小时前
传输层协议TCP
linux·服务器·网络·c++·tcp/ip
Rysxt_18 小时前
UDP请求解析教程:深入理解请求头、请求体与参数机制
网络·网络协议·udp
小马哥编程18 小时前
JWT 是由哪三个部分组成?如何使用JWT进行身份认证?
网络协议·http·架构·ssh
noravinsc19 小时前
https 可以访问 8866端口吗
网络协议·http·https
岛屿旅人19 小时前
英国国防部推进本土化开放架构建设
网络·人工智能·安全·web安全·架构