【问题标题】:How does the HTML5 Web Sockets Interface work?HTML5 Web Sockets 接口是如何工作的?
【发布时间】:2010-11-29 19:46:04
【问题描述】:

我从一个相关问题here 中听说了 HTML 文件规范中的 Web 套接字接口。
听起来很有希望!
我不明白它是如何工作的,它仍然使用 HTTP 协议并解决它还是像 TCP 套接字一样工作?

【问题讨论】:

    标签: sockets interface html websocket


    【解决方案1】:

    Web Socket 协议是一个基于 TCP 的协议,但它被设计为降级为 HTTP。还有一个 HTTP 握手请求服务器升级到 Web Sockets 协议。因此,如果服务器支持它,那么将使用双工 TCP 连接,否则使用 HTTP 和 Comet hacks。

    【讨论】:

    • 上次看到WebSocket协议规范,没有办法自动降级到HTTP。这是在哪里添加的?
    • WebSockets(曾经?)支持 NTP,一种在 80 年代关闭的协议。
    【解决方案2】:

    它不是 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。

    http://github.com/kanaka/noVNC/tree/master/utils/

    【讨论】:

      【解决方案3】:

      在某种程度上,它既是一个 HTTP 请求,也是一个普通的 TCP 套接字。

      通过 TCP 使用普通 HTTP 请求请求 websocket 连接。 发送的一些标头向 web 服务器表明正在请求的是 websocket 而不是普通页面,但从根本上说这只是一个 HTTP 请求。

      从服务器发送响应后,升级连接。也就是说,用于 HTTP 的 TCP 连接被劫持以进行更高级别的调用:双向实时数据传输。

      一旦你具备双向高效沟通的能力(这是战胜彗星的主要胜利),开发人员的视野就会大大增加。突然之间,仅使用网络技术无法实现的 MMO 游戏和实时协作之类的事情变得可能。

      【讨论】:

      • 问题:是否完全像打开 http 请求并保持打开状态? (就像彗星长轮询......)?还是有什么不同
      • @RoyiNamir,是的,完全一样,给或取几个标头,只是不必每次要发送或接收东西时都打开新连接。
      • 谢谢。所以它实际上做了真正的推动......对吗? (并且不响应请求...)
      • websocket 服务器确实以upgrade response 响应请求,然后您可以发送和接收 websocket 消息。
      • @RoyiNamir 是的,它确实在推动。不仅从服务器推送,它的双向连接。
      【解决方案4】:

      在这种情况下,服务器的角色就来了:

      在 HTML 5 中,WebSocket 类似于 fone(2 路通信)而不是步话机。 HTTP 协议升级为 websocket 协议。(wss:// from ws://) SERVER 应该能够打开双工通道,因此同意双工通信。 也请通过此链接: http://www.html5rocks.com/en/tutorials/websockets/basics/

      谢谢。

      【讨论】:

        猜你喜欢
        • 2014-07-24
        • 2023-03-15
        • 2013-10-08
        • 2012-02-29
        • 1970-01-01
        • 2020-07-30
        • 1970-01-01
        • 2015-06-24
        • 2010-10-25
        相关资源
        最近更新 更多