Flash 中的 WebSocket 与原始 TCP 套接字
WebSockets 添加了什么到原始 TCP 连接? 为什么我应该使用 WebSocket?
我想听听缺点和优点,例如:
- 好的:WebSockets 添加了一些有用的东西,如自动重新连接、会话 ID 等。
- 坏的:WebSockets 增加了很多开销
我只有 Flash 客户端,不需要支持 Javascript 客户端。
What WebSockets add to raw TCP connection?
Why should I use WebSockets?
I'd like to hear cons and pros like:
- Good: WebSockets add some useful things like autoreconnection, session ids, etc.
- Bad: WebSockets add a lot of overhead
I'll have only Flash clients, no need to support Javascript clients.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您无法从浏览器中的 Web 应用程序执行原始套接字。即使来自 Flash 的“原始”套接字连接也不是真正的原始连接,因为您必须响应策略文件请求才能获取 CORS安全性(WebSockets 握手的部分原因)。
在初始 WebSocket 握手之后,WebSocket 消息每帧有两个字节的帧开销(Hixie-* 有 '\x00...\xff',HyBi-07 有两个字节的标头),因此与常规套接字相比,开销可以忽略不计。
WebSocket 握手是 HTTP 兼容的升级请求,因此可以轻松地将 WebSocket 支持集成到现有的 Web 服务器中并使用现有的 Web 端口 (80/443),这意味着 WebSocket 连接也可以更轻松地集成到现有的防火墙规则中。
HTTP 兼容握手还意味着现有的 HTTP 身份验证机制可以与 WebSocket 透明地协作。此外,WebSocket 可以通过现有的 Web 代理进行代理,只需很少的修改或无需修改。
在 WebSockets 协议修订版 (HyBi-07) 的下一个修订版中,它们使用客户端到服务器的有效负载数据 XOR 屏蔽来防止 Web 中介行为不当。
自动重新连接、会话 ID 等内容并未在 WebSocket 中定义,尽管基于 WebSocket 构建的多个 Javascript 框架都具有这些功能,例如 Socket.IO。如果您正在从 Flash 应用程序执行 WebSocket,那么您需要执行自己的会话管理或转换现有的会话管理库以使用 WebSocket 而不是 Flash 套接字(这样的转换非常简单)。
更新:
一些可能对您或其他登陆此处的人有用的链接:
You can't do raw sockets from a web application in a browser. Even "raw" socket connections from Flash are not really raw because you have to answer a policy file request to get CORS security (part of the reason for the WebSockets handshake).
After the initial WebSocket handshake, WebSocket messages have two bytes of framing overhead per frame (Hixie-* has '\x00...\xff' and HyBi-07 has two byte header), so the overhead is pretty negligible compared to regular sockets.
The WebSocket handshake is an HTTP compatible Upgrade request so it is easy to integrate WebSockets support into existing web servers and to use existing Web ports (80/443) which means that WebSocket connection can also more easily integrate into existing firewall rules.
The HTTP compatible handshake also means that existing HTTP authentication mechanisms can work transparently with WebSockets. Also, WebSockets can be proxied by existing web proxies with little or no modification.
In the next revision of the WebSockets protocol rev (HyBi-07), their is protection against misbehaving web intermediaries using client to server XOR masking of the payload data.
Things like auto-reconnection, session ids, etc aren't defined in WebSockets although several Javascript frameworks built on WebSockets have this such as Socket.IO. If you are doing WebSockets from Flash applications then you would need to do your own session management or convert an existing session management library to use WebSockets rather than Flash sockets (such be pretty easy conversion).
Update:
Couple of links that might be useful to you or others who land here: