您的位置:首页 > 其它

认识WebSocket原理

2017-07-12 10:03 113 查看


一、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.1
Host: server.example.com
Upgrade: websocket   (告诉 [code]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 Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat


这里开始就是HTTP最后负责的区域了,告诉客户,我已经成功切换协议啦~
Upgrade: websocket
Connection: 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),

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

解决了上面同步有延迟,而且还非常消耗资源的这种情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  websocket