【发布时间】:2017-09-03 04:15:45
【问题描述】:
我正在用 C 实现一个 WebSocket 服务器,并且想知道文本/二进制帧指示符(操作码 1 和 2)的用途是什么。他们为什么在那里?最后,在这两种情况下,有效载荷都包含比特。当有一个使用 websocket 的协议时,我知道数据中的期望值。是不是因为当它是一条短信时,我可以确定有效载荷只包含 UTF-8 有效数据?
【问题讨论】:
标签: websocket
我正在用 C 实现一个 WebSocket 服务器,并且想知道文本/二进制帧指示符(操作码 1 和 2)的用途是什么。他们为什么在那里?最后,在这两种情况下,有效载荷都包含比特。当有一个使用 websocket 的协议时,我知道数据中的期望值。是不是因为当它是一条短信时,我可以确定有效载荷只包含 UTF-8 有效数据?
【问题讨论】:
标签: websocket
我将首先指出 WebSockets 通常是在考虑到 Javascript 客户端(即浏览器)的情况下实现的。
当您使用 C 时,可能以不同的方式使用不同的操作码,但在使用 Javascript 时,这种差异控制了事件中数据的类型(Blob 与 String)。
正如您在问题中指出的那样,字符串始终是有效的 UTF-8 字节流,而 blob 不是。
这会影响某些数据传输方案(例如 JSON 解析,它需要 UTF-8 有效流)。
显然,在 C 中,此操作码可以以不同的方式使用,但最好以与潜在 javascript 客户端相同的方式使用操作码。
附言
那里有许多 Websocket C 库和框架(我是facil.io 的作者)。
除非这是一个研究项目,否则我会考虑使用其中一个已建立的框架/库。
【讨论】: