协议-【5】Websocket协议

 概念:

        Websocket 是HTML5出的东西(协议),也就是说HTTP协议没有变化,但HTTP是不支持持久连接的(长连接,循环连接的不算), Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说,可以把 WebSocket 看成是 HTTP 协议为了支持长连接所打的一个大补丁 

协议-【5】Websocket协议_第1张图片

Websocket只需要一次HTTP握手,就可以做到源源不断的信息传送了。(在程序设计中,这种设计叫做回调,即:你有信息了再来通知我,而不是我傻乎乎的每次跑来问你), WebSocket 还是一个双通道的连接,在同一个 TCP 连接上可以   信息,由客户主动询问,转换为服务器(推送)有信息的时候就发送(当然客户端还是等主动发送信息过来的。。)

内容拓展:

  HTTP1.0:  每次请求都要创建连接(就是一个Request 对应一个Response)

 HTTP1.1:  进行了改进,它默认开启长连接keep-alive(使用keep-alive参数来告知服务器端要建立一个长连接) ,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response(一个TCP连接上可以传送多个HTTP请求和响,但是对每个请求仍然要单独发 header)

 备注:但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个r esponse 也是 被动的,不能主动发起。

建立持久连接的方式:

1: ajax轮询让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。

                      request--->response , request--->response ,  request--->response ........ loop

3: long poll采取的是阻塞模型(一直打电话,没收到就不挂电话)

                     request--->。。。。。。。reponse(没有消息,就不返回reponse,等待到有消息的时候,再给你(Response))

                     下个消息获取再次建立连接:request--->。。。。reponse(没有消息,就不返回reponse)

         所谓的 polling 是指从客户端(一般就是浏览器)不断主动的向服务器发 HTTP 请求查询是否有新数据

上面2种方式都是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点,被动性(服务端不能主动联系客户端,只能有客户端发起

3: webscoket只需建立一次连接后,就可以源源不断 收 ,信息了,形成了通道。

参考资料:

        https://www.zhihu.com/question/20215561

你可能感兴趣的