V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jonychen1
V2EX  ›  2018

WebSocket 和 HTTP 的区别及原理

  •  
  •   jonychen1 · 2018-07-23 16:45:44 +08:00 · 1895 次点击
    这是一个创建于 2075 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有时候还会有老铁在考虑在什么样的环境下使用 WebSocket,什么样的环境下使用 HTTP,今天我们来说下 WebSocket 和 HTTP。

    WebSocket 和 HTTP 的区别

    http 协议是用在应用层的协议,他是基于 tcp 协议的,http 协议建立链接也必须要有三次握手才能发送信息。 http 链接分为短链接,长链接,短链接是每次请求都要三次握手才能发送自己的信息。即每一个 request 对应一个 response。长链接是在一定的期限内保持链接。保持 TCP 连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。 WebSocket 他是为了解决客户端发起多个 http 请求到服务器资源浏览器必须要经过长时间的轮训问题而生的,他实现了多路复用,他是全双工通信。在 webSocket 协议下客服端和浏览器可以同时发送信息。 建立了 WenSocket 之后服务器不必在浏览器发送 request 请求之后才能发送信息到浏览器。这时的服务器已有主动权想什么时候发就可以发送信息到服务器。而且信息当中不必在带有 head 的部分信息了与 http 的长链接通信来说,这种方式,不仅能降低服务器的压力。而且信息当中也减少了部分多余的信息。

    HTTP 的长连接与 websocket 的持久连接

    HTTP1.1 的连接默认使用长连接( persistent connection ), 即在一定的期限内保持链接,客户端会需要在短时间内向服务端请求大量的资源,保持 TCP 连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。 在一个 TCP 连接上可以传输多个 Request/Response 消息对,所以本质上还是 Request/Response 消息对,仍然会造成资源的浪费、实时性不强等问题。 如果不是持续连接,即短连接,那么每个资源都要建立一个新的连接,HTTP 底层使用的是 TCP,那么每次都要使用三次握手建立 TCP 连接,即每一个 request 对应一个 response,将造成极大的资源浪费。 长轮询,即客户端发送一个超时时间很长的 Request,服务器 hold 住这个连接,在有新数据到达时返回 Response websocket 的持久连接 只需建立一次 Request/Response 消息对,之后都是 TCP 连接,避免了需要多次建立 Request/Response 消息对而产生的冗余头部信息。

    希望讲了这么多能够帮助大家更加深入的去了解 WebSocket 和 HTTP 之间的区别和联系。如果觉得还是没有理解可以试试用一下第三方 WebSocket 服务,类似 GoEasy 这种免费的,大家可以去了解一下。网站好像是 www.goeasy.io ,码了这么多…今天就说到这里咯。

    1 条回复    2018-09-16 08:55:39 +08:00
    byou
        1
    byou  
       2018-09-16 08:55:39 +08:00
    说的好。一般的 Web 项目都是用的短连接,因为如果并发量太大,长连接太耗费服务器的性能了。现在长连接主要用在游戏中吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   939 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:56 · PVG 04:56 · LAX 13:56 · JFK 16:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.