认识WebSocket原理

来源:互联网 发布:淘宝app首页流量来源 编辑:程序博客网 时间:2024/06/08 17:28

一、HTTP是什么样的协议,具体有什么优点

HTTP的生命周期通过 Request 来界定,也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次HTTP请求就结束了。

在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = Response ,在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起

HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

二、WebSocket是什么样的协议,具体有什么优点

首先Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手。

首先我们来看个典型的 Websocket 握手

GET /chat HTTP/1.1Host: server.example.comUpgrade: websocket   (告诉 Apache 、 Nginx 等服务器:注意啦,我发起的是Websocket协议)Connection: Upgrade   (连接)Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== ( Base64 encode 的值,这个是浏览器随机生成的)Sec-WebSocket-Protocol: chat, superchat(用户定义的字符串,用来区分同URL下,不同的服务所需要的协议)Sec-WebSocket-Version: 13 服务器所使用的 Websocket Draft(协议版本)()Origin: http://example.com
HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=Sec-WebSocket-Protocol: chat

这里开始就是HTTP最后负责的区域了,告诉客户,我已经成功切换协议啦~

Upgrade: websocketConnection: Upgrade

三、Websocket的作用

Ajax轮询——"定时的通过Ajax查询服务端"。

概念:

轮询(polling):客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接。


<script type="text/javascript">        var getting = {        url:'server.php',        dataType:'json',        success:function(res) {         console.log(res);}};//关键在这里,Ajax定时访问服务端,不断获取数据 ,这里是1秒请求一次。window.setInterval(function(){$.ajax(getting)},1000);</script>
Ajax长轮询------属于Ajax轮询的升级版

作用:在客户端和服务端都进行了一些改造,使得消耗更低,速度更快。

<script type="text/javascript">    //前端Ajax持续调用服务端,称为Ajax轮询技术    var getting = {        url:'server.php',        dataType:'json',        success:function(res) {         console.log(res);         $.ajax(getting); //关键在这里,回调函数内再次请求Ajax}                //当请求时间过长(默认为60秒),就再次调用ajax长轮询        error:function(res){        $.ajax($getting);        }};$.ajax(getting);</script>

言归正传,我们来说Websocket吧

服务器因为每天要接待太多客户了,是个健忘鬼,你一挂电话,他就把你的东西全忘光了,把你的东西全丢掉了。你第二次还得再告诉服务器一遍。

所以在这种情况下出现了,Websocket出现了。他解决了HTTP的这几个难题。首先,被动性,当服务器完成协议升级后(HTTP->Websocket),

服务端就可以主动推送信息给客户端啦。

解决了上面同步有延迟,而且还非常消耗资源的这种情况。



原创粉丝点击