2011-05-11 30 views
20

什么WebSockets添加到原始TCP连接? 我为什么要使用WebSockets?WebSockets vs Flash中的原始TCP套接字

我想听听缺点和优点一样:

  • 好:添加的WebSockets像autoreconnection,会话ID等一些有用的东西
  • 坏:WebSockets的增添了不少的开销

我只有Flash客户端,不需要支持Javascript客户端。

+0

关于此主题的更好的信息:http://lucumr.pocoo.org/2012/9/24/websockets-101/ – tybro0103 2013-05-15 14:01:52

回答

17

您无法在浏览器中从Web应用程序执行原始套接字。即使来自Flash的“原始”套接字连接也不是真正的原因,因为您必须回答策略文件请求才能获得安全性(WebSockets握手的部分原因)。在最初的WebSocket握手之后,WebSocket消息每帧有两个字节的帧开销(Hixie- *有'\ x00 ... \ xff',而HyBi-07有两个字节的头部),所以开销是相当可以忽略不计的与普通套接字相比。

WebSocket握手是HTTP兼容升级请求,因此很容易将WebSockets支持集成到现有Web服务器并使用现有Web端口(80/443),这意味着WebSocket连接也可以更容易地集成到现有防火墙规则中。

HTTP兼容握手也意味着现有的HTTP身份验证机制可以透明地与WebSockets一起工作。此外,WebSockets可以通过现有的Web代理进行代理,几乎不需要修改。

在WebSockets协议rev(HyBi-07)的下一个版本中,它们可以防止使用客户端到服务器XOR屏蔽有效负载数据的行为不当的Web中介。

类似自动重新连接,会话ID等没有在WebSockets中定义,虽然几个构建在WebSockets上的JavaScript框架有这样的,如Socket.IO。如果你正在从Flash应用程序中做WebSockets,那么你需要做你自己的会话管理或者将现有的会话管理库转换为使用WebSockets而不是Flash套接字(这很容易转换)。

更新

夫妇的链接,可能对你或其他人谁在这里降落有用:

  • AS3WebSocket:对于Flash应用程序的WebSockets客户端库。
  • web-socket-js:在Flash for JavaScript应用程序中实现的WebSockets fallback/polyfill(向具有Flash但没有本机WebSockets的浏览器添加WebSockets支持)。
+0

关于开销,它是2个字节的最小值,但通常更多。从客户端到服务器,它是额外的4个字节的掩码。当数据长度超过126个字节时,你必须为uint添加另外4个字节的长度。所以通常需要大约10个字节的数据开销。但是更重要的是,处理这个头文件并且在服务器端为每个消息执行解蔽,所以你使用更多的CPU来处理数据。同样,如果你从数据直接创建好序列化到二进制,那么使用utf8消息作为示例JSON会好得多。对于闪存使用原始。 – moka 2012-05-03 09:09:36

+1

Maksims,HyBi工作组非常有意地选择了掩蔽客户端 - >服务器流量的机制。由于掩码包含在帧中,因此不需要记住任何状态,并且正在运行的4个字节的异或是关于批量或体系结构中最快(高效)的流操作。另外需要注意的是,服务器 - >客户端流量不会被屏蔽,大型数据通常是服务器 - >客户端。而且,126-> 65535个字节的帧有2个字节多余NOT 4个字节多。超过65535是8个额外的字节。这个头部开销不会造成可测量的真实世界差异。 – kanaka 2012-05-04 06:02:18

+0

那么怎么样:“每一项新技术都带来一系列新问题,就WebSocket而言,它是与代理服务器的兼容性,代理服务器在大多数公司网络中兼容HTTP连接,WebSocket协议使用HTTP升级系统(通常用于HTTP/SSL)将HTTP连接“升级”为WebSocket连接,某些代理服务器不喜欢这种连接,因此即使给定的客户端使用WebSocket协议,也可能无法建立一个连接“。 - http://www.html5rocks.com/en/tutorials/websockets/basics/ – Triynko 2013-06-26 17:31:13