聊聊websocket opcode中的text / binary模式

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

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

相关推荐
K成长日志40 分钟前
BLE协议之设备地址
网络·物联网·网络协议·嵌入式·蓝牙·ble
广州市顺风搬家服务有限公司1 小时前
实验室搬迁科普专业流程防护标准与合规核心要点
网络·其他·安全
liulilittle1 小时前
KCC 边界缺陷深度分析:六问题根源与解决方案
网络·网络协议·tcp/ip·计算机网络·信息与通信·ip·通信
BS_Li3 小时前
【Linux网络编程】NAT、代理服务、内网穿透
linux·网络·智能路由器
Thomas.Chan3 小时前
数据中心动环监控系统架构详解
运维·网络·计算机网络·其他·系统架构·数据中心
浩瀚之水_csdn4 小时前
Python 3 网络编程详解:从原理到实战
开发语言·网络·python
犹豫的哑铃4 小时前
WebSocket 协议
网络·websocket·网络协议
funnycoffee1235 小时前
lacp报文占多少字节?报文的目的mac
网络·网络协议·macos
安全检测中5 小时前
VRRP故障与优化-BFD
网络
薄荷椰果抹茶5 小时前
计算机导论_第4章_笔记
服务器·网络·笔记