2010-09-27 70 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