WebSocket 介绍

WebSocket 介绍

 今天想给大家介绍一下WebSocket技术,在说他之前就不得不先说一下我们当前的HTTP协议,WebSocket和我们现在的HTTP几乎是没有关系的,但是他们两个还是有一部分交集的

WebSocket是在HTML5下的一种新的协议,但是他和http一样都是基于tcp/ip的。所以他就有了一写http 协议的特性,这两个都是应用层的协议,并且因为他们都是基于TCP的所以他们都是可靠的协议,调用WebSocket的send函数在实现的时候和http一样最终都是通过了tcp的系统接口进行传输的。他们两个都是处于应用层的协议,但是为什么上图里边两个协议会存在一定的交集呢?是因为websocket在建立握手联机的时候,数据是通过http协议进行传输的,但是在建立链接之后,真正的数据传输阶段是不需要http协议参与的。

 出现一个新的被大家所接受的协议是肯定和之前的协议相比是能解决一部分问题,存在他的优点的。大家都知道http的链接并不是一个持久化的,在http1.0的时候当发起一个http请求之后,服务端返回一个响应,那么这个请求就结束了,在1.1的时候默认了一个keep-alive 长链接的东西,也就是说在一个http链接中,可以发送多个请求接受多个响应,但是这里要注意的是在http里边一个响应是对应一个请求的,并且一个请求只能有一个响应,并且这个响应是被动的,也就是说虽然是长链接,但是必须在我的客户端发起请求你才能给我返回响应(听说在2.0的时候会有推送的功能,具体还不清楚)

  在websocket建立链接的时候会采用http协议

 

这是网上拿到的一个websocket请求的样例这里有一些webcoket独有的东西,这里不过多介绍,今天只介绍websocket是个什么有什么优点。

 在http的时代有两种方式来实现信息的实时传递,也就是http long poll和ajax轮询也就是我们常说的长轮询和短轮询,短轮询的原理十分简单,就是让我们的浏览器每隔几秒就发送一个请求,去询问服务器是否有新的信息,客户端不断发送请求有咩用新的信息有没有新的信息,大多数情况下服务端都会返回没有,只有在有信息的时候进行返回信息内容。而long poll长轮询类似不过是阻塞的模型,当客户端向服务端发起链接然后发送请求的时候,如果没有消息那就一直不返回响应给我们的客户端,直到有消息的时候才返回,返回之后客户端再次建立链接等待请求。无论是哪两种情况,响应都是在请求发送之后被动的发送过去,并且短轮询的方式需要服务器有很快的处理速度,在没有资源的情况下快速返回没有的消息,否则当有大量客户端请求来的时候就会出现问题,长轮询就要求服务端存在很高的并发情况。他需要同时接待大量客户的能力。短轮询的话会导致数据反馈的效率很低,因为来的很多数据都是空,长轮询的话会导致服务器资源浪费

 并且我们常说http请求是一个没有链接的,无论之前你向他表明了多少次身份,当你再次找到他时,你都得把你的信息再次全部告诉他一遍。

所以在传统的http客户端和服务端请求和响应的模式是这样的

而websocket的客户端和服务端请求和响应的是这样的

和传统的http长链接的对比来看websocket主要实现了以下特点 

1.真正的全双工方式,建立链接之后客户端和服务端是完全平等的,之前可以相互请求。并不像之前那样服务端必须等待客户端的请求才能发送响应的信息。

2.http长链接每次数据交换除了真正的数据部分之外,服务器和客户端之间还要大量的交换http 的header信息交换率相对来说很低,websocket协议通过第一个请求建立链接之后,每次交换的数据都不再需要再去发送http header就可以交换数据

然后我们都知道当客户端在真正和服务端交互的时候并不是说存在一条链接,而是中间经过了千山万水的路程,经过大量路由的无数次转发才会到达目的地,这样的情况下就并不是说我和你保证一份长链接就可以了,这些中间节点很有可能会在一段时间没有发送数据就自主的断开了一些链接,在这种情况下, 不论服务器还是客户端都不会有任何的提示,他们只会一次一次的发送信息认为对方还在,为了解决这个事情websocket的设计者人就提出了让服务器和客户端能够发送Ping/Pong Frame这种Frame是一种特殊的数据包,它只包含一些元数据而不需要真正的Data Payload 可以在不影响app 的情况下维持住中间的网络链接。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页