我目前在noVNC中有一個python和C版本的wsproxy(WebSockets到普通TCP套接字代理)。我想用node.js創建一個wsproxy的版本。一個關鍵因素(以及我不僅僅使用現有節點WebSocket代碼的原因)是,除非WebSocket標準採用二進制編碼,否則wsproxy和瀏覽器/客戶端之間的所有流量都必須進行編碼(並且base64解碼/編碼是快速且容易的在瀏覽器中)。Base64在節點(node.js)中高效地從緩衝區解碼到緩衝區
緩衝區類型具有base64編碼支持,但這是從Buffer到字符串,反之亦然。 如何在兩個緩衝區之間進行base64編碼/解碼,而不必首先轉換爲字符串?
約束:
- 直接緩衝到緩衝器(除非你能證明Buffer->與字符串>緩衝區一樣快)。
- 由於節點具有內置的base64支持,我想使用它和而不是外部模塊。
- 就地編碼/解碼在一個緩衝區內是可以接受的。
Here是討論base64在節點中的支持,但是從我所看到的並不能回答我的問題。
這不是唯一的問題,閃光後退變得可怕的慢?否則,二進制工作正常,雖然在協議中存在UTF-8編碼/解碼開銷,但這總是在那裏。無論如何,在複製和使用'toString()'在快速測試中速度慢150倍時,'buffer.copy'不適用編碼。您可能希望在節點上發出一個錯誤,以緩衝區複製指定編碼中的哪些副本。 – 2010-10-25 11:47:46
由於WebSockets數據當前僅限於UTF-8(希望在將來的修訂中這會改變),代理服務器必須對原始套接字數據進行某種編碼。閃回回落增加了無法發送零字節的扭曲(技術上UTF-8是合法的)。將每個字節編碼爲UTF-8佔用了150%的空間(任何其他UTF-8編碼在Javascript中解碼速度太慢)。 Base64是133%,因此在空間和處理方面效率更高。 – kanaka 2010-10-25 14:39:14