可以与WebSockets一起使用的二进制数据编码的替代方法是什么?我只知道你可以使用Base64。还有其他人吗?
答案 0 :(得分:4)
由于基本上所有支持WebSocket的浏览器现在都支持通过Typed Arrays(arraybuffers)和Blob发送/接收原始二进制数据,因此很少需要将二进制数据编码为文本。只有少数情况下这是必要的:
在这些情况下,base64不是您唯一的编码选项。任何导致有效UTF-8文本的编码(所有版本的WebSockets都支持文本格式)都可以。通过atob和btoa函数,Base64恰好在浏览器中非常容易支持。例如,如果您有一个表示二进制字节值的数字数组,那么您可以将其编码为可通过任何WebSocket版本安全发送的JSON字符串:
JSON.stringify([120,32,255])
'[120,32,255]'
它简单且易读,但它比base64的空间效率要低得多。还有更有效的方法将二进制数据编码为UTF-8字符串,这将节省更多的空间,但是,它们最终会在浏览器中消耗更多的CPU资源,并且需要自定义算法将二进制数据映射到UTF- 8个代码点。
答案 1 :(得分:2)
WebSockets支持原始二进制数据。如何公开这取决于您使用的语言/库/ API。在JavaScript /浏览器中,您可以使用类型化数组(ArrayBuffer或Blob)调用send。收到二进制消息时,它将作为其中一种类型提供。 WebSocket浏览器API文档(http://www.w3.org/TR/websockets/)提供了有关如何完成此操作的更多信息。