聊聊websocket opcode中的text / binary模式

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

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

相关推荐
雷工笔记26 分钟前
MES 系统设备管理模块详细设计方案
大数据·运维·网络
xhbh6661 小时前
端口转发是什么?如何设置端口转发?
网络·流量转发·端口流量转发
S1998_1997111609•X1 小时前
论恶意注入污染蜜罐进程函数值取仺⺋以集团犯罪获取数据爬虫的轮系依据
网络·数据库·爬虫·网络协议·百度
S1998_1997111609•X2 小时前
恶意注入污染蜜罐HDMI进程函数值进行封禁垃圾蠕虫仓蟲的轮系依据行为戆直㞢仓shell token
数据库·爬虫·网络协议·百度·开闭原则
头条娱圈2 小时前
Ella 陈嘉桦「艾拉主意」苏州站圆满落幕 十站二十场铸就巡演里程碑
网络
小墨同学boy3 小时前
别再折腾 FRP 了!无公网 IP、不碰路由器,Tailscale 三步搞定异地组网
网络·网络协议·tcp/ip
想成为优秀工程师的爸爸3 小时前
车载以太网之要火系列 - 第33篇:郭大侠学UDS(10服务)- 桃花岛内规矩多,模式切换要会说
网络·笔记·网络协议·信息与通信·车载以太网
ACP广源盛139246256733 小时前
一芯搞定多屏高清@ACP#GSV1221 DP 1.4 MST 转 HDMI 1.4 高集成转换芯片
网络·人工智能·嵌入式硬件·计算机外设·电脑
Empty-Filled3 小时前
AI Agent 测试入门:从回答问题到执行任务
网络·人工智能
Yupureki3 小时前
《Linux网络编程》4.应用层HTTP协议
linux·服务器·c语言·网络·c++·http