我从此处的相关问题中听说了 HTML 文件规范中的 Web 套接字接口。
听起来很有希望!
我不明白它是如何工作的,它仍然使用 HTTP 协议并解决它,还是它像 TCP 套接字一样工作?
4 回答
在某种程度上,它既是一个 HTTP 请求,也是一个常规的 TCP 套接字。
使用 TCP 上的普通 HTTP 请求请求 websocket 连接。发送的一些标头向网络服务器表明它是被请求的 websocket,而不是普通页面,但基本上它只是一个 HTTP 请求。
从服务器发送响应后,升级连接。也就是说,用于 HTTP 的 TCP 连接被劫持以进行更高级别的调用:双向实时数据传输。
一旦您具备双向高效通信的能力(这是战胜彗星的主要胜利),开发人员的视野就会大大增加。突然之间,像 MMO 游戏和实时协作这样仅使用 Web 技术无法实现的事情变得可能。
它不是 HTTP,也不是普通的 TCP 套接字。它旨在获得常规套接字连接的低开销(AJAX/COMET 的开销非常高),但不会牺牲过去几年开发的一些浏览器安全原则。
最初的 WebSockets 握手看起来很像 HTTP。这将使现有的 HTTP 代理和 Web 服务器更容易支持传入的 WebSockets 连接并使用它们做正确的事情(即将它们转发到真正的处理程序)。但是在成功握手(包括交换和验证原始信息)之后,连接保持打开状态并变为双向。
每个数据包(无论是从服务器还是从客户端发送的)都以“\x00”(零字节)开头,后面是 UTF-8 编码数据,并以“\xff”(全为字节)结尾。
当前的标准草案在这里:https ://datatracker.ietf.org/doc/html/draft-hixie-thewebsocketprotocol-76
您还可能会发现 noVNC 中包含的 wsproxy 作为参考很有用。wsproxy 是一个通用的 WebSockets 到 TCP 套接字代理。noVNC 包含 C 和 python 版本的 wsproxy。
Web Socket 协议是基于 TCP 的协议,但它被设计为降级为 HTTP。还有一个 HTTP 握手请求服务器升级到 Web Sockets 协议。因此,如果服务器支持它,那么将使用双工 TCP 连接,否则使用 HTTP 和 Comet hacks。
在这种情况下,服务器的角色出现在:
在 HTML 5 中,WebSocket 就像 fone(2-way comm.)而不是对讲机。HTTP 协议升级为 websocket 协议。(wss:// from ws://)
服务器应该能够打开双工通道,因此同意双工通信。请也通过此链接:
http ://www.html5rocks.com/en/tutorials/websockets/basics/
谢谢。