可用於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