可用于WebSockets的二进制数据编码有哪些替代方法?我只知道你可以使用Base64。有其他人吗?使用WebSockets进行Base64编码的替代方案
0
A
回答
4
由于基本上所有带WebSocket支持的浏览器现在都支持通过Typed Arrays(数组缓冲区)和Blob发送/接收原始二进制数据,因此很少需要将文本编码为文本。只有少数场合,这是必要的:
- 使用web-socket-js回退与不具备内置如Internet Explorer 6-9和Firefox 3.6的WebSocket支持的浏览器。请注意,web-socket-js不支持二进制数据的原因是因为这些浏览器不支持Typed Arrays和Blob,所以“二进制”数据已经在浏览器中以某种方式进行编码(通常是从0到255之间的普通数字数组)或作为具有非ASCII字符值的字符串。
- 在仅支持的WebSocket Hixie协议(其不具有要发送的原始二进制数据的能力)的浏览器,如Safari(移动设备和桌面)版本小于6
在这些情况下,Base64是不是您唯一的编码选项。任何导致有效UTF-8文本的编码(所有版本的WebSocket均支持文本格式)将会起作用。通过atob和btoa函数,Base64恰好很容易在浏览器中支持。例如,如果你有一个表示二进制字节值的数字阵列,那么你可以只编码这一个JSON字符串,它是安全的通过任何WebSocket的版本送:
JSON.stringify([120,32,255])
'[120,32,255]'
它是简单和人类可读的,但与base64相比,它的空间效率要低得多。将二进制数据编码为UTF-8字符串的方法也更加高效,但是,它们最终会消耗浏览器中更多的CPU资源,并需要一种自定义算法将二进制数据映射到UTF- 8码点。
2
WebSockets支持原始二进制数据。这是如何公开取决于你使用的语言/库/ API。在JavaScript /浏览器中,您可以使用Typed数组(ArrayBuffer或Blob)调用send。当接收到二进制消息时,它将作为这些类型之一进行传送。 WebSocket浏览器API文档(http://www.w3.org/TR/websockets/)有关于如何完成的更多信息。
相关问题
- 1. 使用C和OpenSSL进行base64编码
- 2. 使用Delphi XE8进行XSLT转换的替代方案
- 3. 如何使用Base64编码方案算法解密文本
- 4. 我的编码更快的解决方案,用...代替循环?
- 5. 使用lxml进行python编码 - 复杂的解决方案
- 6. 我应该使用什么库进行base64编码/解码
- 7. 使用Base64在ORMLITE中对文本进行编码/解码
- 8. WebSockets的替代品
- 9. GWT:使用编码方案编码url
- 10. 使用示例解决方案进行编码练习
- 11. 在iOS7中对UIImage进行编码并使用Java进行解码(Base64)
- 12. Base64编码逐行更快的方式
- 13. 使用JSX的反应替代方案
- 14. 使用CA证书的替代方案
- 15. 使用PHP的Apache RewriteLock替代方案?
- 16. 如何对BASE64进行URL编码?
- 17. 使用Base64编码的JsonResult
- 18. 使用电话号码作为用户名的替代方案
- 19. 在node.js中的base64解码/编码中指定'替代字符'
- 20. 仅使用JDK6进行base64解码
- 21. Base64编码新行
- 22. 使用WebClient.BaseAddress替代Silverlight中的基础URL替代方案
- 23. playN替代方案
- 24. Example.com替代方案
- 25. TFS替代方案
- 26. WSO2替代方案
- 27. Nginx:more_clear_headers替代方案
- 28. AppDomain.AppendPrivatePath替代方案?
- 29. Javascript。替代方案
- 30. android.net.wifi.WIFI_HOTSPOT_CLIENTS_CHANGED替代方案
谢谢你的详细答案。 – pvorb