2010-09-27 199 views
10

我正在閱讀規範和許多關於websocket使用的示例。幾乎所有人都使用websockets談論UTF-8或ascii郵件傳輸。websocket用於數據和解碼的二進制傳輸

最新的Hybi websocket規範要求支持二進制傳輸。 REQ 6 in hybi spec

另外我讀了一些地方,鉻支持hybi。但是最新版本的Chrome 7.0僅在pywebsocket配置中選擇draft-hixie時才起作用。

任何瀏覽器是否支持hybi規範?即使它是開發者,它也可以。

+2

我想你現在應該知道這一點,但作爲所有人的一般更新 - Chrome Canary現在支持這一點。 – pimvdb 2011-10-25 15:12:55

回答

7

在WebSockets中支持非UTF-8(即二進制)編碼可能需要一段時間。

我建議在客戶端和服務器上使用base64編碼/解碼。所有支持WebSocket的瀏覽器都有window.atob(base64解碼)和window.btoa(base64編碼)。大多數語言你可能編寫一個WebSocket服務器,使用base64庫(即Python中的base64模塊)。

如果您想要傳輸二進制數據,您可能會對noVNC附帶的wsproxy感興趣,這是一個基於Web的VNC客戶端。 wsproxy(有一個C和Python版本)是一個WebSocket到通用TCP套接字代理。它base64編碼/解碼瀏覽器的所有流量。您可以使用它從具有WebSockets功能的瀏覽器連接到任何類型的TCP端口。

請注意,noVNC具有base64編碼/解碼的Javascript實現,因爲相信與否,Javascript版本比atob/btoa稍快。

聲明:我創建了noVNC。

+1

更新:WebSockets協議的IETF-07草案在上次調用中,並且具有二進制幀支持。以下是討論API更改以添加二進制支持的錯誤:http://www.w3.org/Bugs/Public/show_bug.cgi?id=12102 – kanaka 2011-05-01 21:23:18