【问题标题】:How websockets can be faster than a simple HTTP request?websockets 如何比简单的 HTTP 请求更快?
【发布时间】:2013-10-10 18:08:06
【问题描述】:

您仍然需要从您的计算机向网站的服务器来回发送请求。 websockets 如何让它变得如此之快?

【问题讨论】:

    标签: http websocket comet


    【解决方案1】:

    WebSocket 是 HTTP 的扩展。对于低延迟通信,Web Sockets 更好。

    也可以查看article

    如何让 websocket 变得如此之快?

    为了建立 WebSocket 连接,客户端和服务器在初始握手期间从 HTTP 协议升级到 WebSocket 协议,如下例所示:-

    GET /text HTTP/1.1
    Upgrade: WebSocket
    Connection: Upgrade
    Host: www.websocket.org
    

    HTTP/1.1 101 WebSocket Protocol Handshake
    Upgrade: WebSocket
    Connection: Upgrade
    …
    

    一旦建立,WebSocket 数据帧就可以在客户端和服务器之间以全双工模式来回发送。文本和二进制帧都可以同时在任一方向全双工发送。数据最少只有两个字节。在文本帧的情况下,每个帧以 0x00 字节开始,以 0xFF 字节结束,并在其间包含 UTF-8 数据。 WebSocket 文本帧使用终止符,而二进制帧使用长度前缀。

    Web Sockets 代表了 Web 通信的下一次发展—— 运行的全双工双向通信通道 通过 Web 上的单个套接字。 HTML5 Web Sockets 提供了一个 可用于构建可扩展的实时 Web 的真正标准 应用程序。此外,由于它提供了一个原生的套接字 到浏览器,它消除了彗星解决方案的许多问题 容易发生。 Web Sockets 消除了开销并显着减少了 复杂性。

    延迟比较:-

    总结:-

    Web Sockets 在可扩展性方面向前迈出了一大步 实时网络。正如您在本文中看到的,HTML5 Web Sockets 可以提供 500:1 或 - 取决于 HTTP 标头的大小 - 甚至 不必要的 HTTP 标头流量减少 1000:1,减少 3:1 减少延迟。这不仅仅是渐进式的改进。 这是一次革命性的飞跃——一次质的飞跃!

    【讨论】:

    • websockets 的缺点是它们不遵循请求/响应的 http 语义,使得 SPDY 和即将到来的 HTTP/2.0 等协议在许多人眼中更具吸引力,因为它们提供了许多相同的好处但保留该语义(尽管指出差异的示例,所以我拉胡尔 +1)
    • @jessemcconnell:- 非常好,先生!还要从同一链接再添加一个点,尽管 Web Sockets 协议已准备好支持一组不同的客户端,但它无法将原始二进制数据传递给 JavaScript,因为 JavaScript 不支持字节类型。因此,如果客户端是 JavaScript,二进制数据将被忽略,但可以将其传递给支持它的其他客户端。
    • 当我们讨论这个话题时,由于“彗星”在问题的标签中,我通常建议使用像 cometd.org 这样的东西作为你的通信总线,而不是直接说 websockets,因为它可以自动选择基于浏览器和服务器支持的最佳协议,http/2、spdy、ws、http/1.1 长轮询,甚至 http/1.0 轮询以及对重新连接的支持层,确保消息排序等
    • 所有现代浏览器都通过 Blob 和类型数组在 Javascript 中支持二进制数据(都可以通过 WebSockets 发送和接收)。
    • @jessemcconnell Cometd 的主页将其描述为“使用称为 Comet 的 Ajax Push 技术模式”。 Comet 用于描述各种长轮询技术,websockets 不是其中之一。你可能在想socket.io?这确实符合您的描述。
    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多