Websocket很美很强悍,请驾驭它
理解WebSocket概念,以下是维基百科的权威解释
WebSocket是一种通信协议,可在单个TCP连接上进行全双工通信。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。
是不是感觉有点晦涩难懂,永前科技有必要在前端外包网详细解释一番。
Websocket是HTML5发布的新规范,并不属于HTTP协议的范围,或者说没关系,关于HTTP协议,永前科技推荐各位朋友阅读另外一篇文章,《理解HTTP协议,简单、直接、暴力》。
WebSocket是一种通信协议,区别于HTTP协议,HTTP协议只能实现客户端请求,服务端响应的这种单向通信。WebSocket弥补了HTTP这个缺陷,实现了客户端与服务端的双向通讯,从技术角度看,就是做到了服务端主动将消息推送给客户端,从用户的角度看,就是做到了点对点的持久通讯,他俩不掉线了。
Websocket和HTTP协议的区别在于,他们的层级不一样,Websocket是一个持久化的协议,是相对HTTP的生命周期,HTTP协议是以request请求的完成为生命周期。
在HTTP1.0中,从一个request请求到返回一个Response回应,生命周期就结束了。这个简单理想的设计方案,在现在的业务场景中越来越不够用了,于是在HTTP1.1版本中得到了升级,使用了一个keep-alive,在一个HTTP连接中,可以发送多个Request,返回多个Response响应。这种打补丁的方式,还是不能满足很多业务需求,因为其简单的特性,决定了HTTP协议的框架下,一个request只能有一个response,而且返回的这个response响应还是是被动的,不能主动发起。
Websocket协议完美的解决了这些问题,因为跟HTTP不在一个层面上,所以不关心有多少request请求和response响应,一直活着,只要有业务有需求,就能主动发起和推送response响应,直到主动杀死Websocket服务,不然就一直存在。
当然,通过long poll 和 ajax轮询的方案,也可以实现这种效果,但是开销相当的大。long poll 和 ajax轮询的方案是给予HTTP来实现的,大致的策略就是一直向服务器发送请求,每隔几秒就发送一次reuqest请求,一直重复询问服务器有没有需要返回到数据,有的话就返回客户端,没有的话就是白问了,拜拜浪费资源,搞得大家都很累。long poll 和 ajax的区别在于,ajax这家伙很执着,不管什么情况,都会一直问下去,而long poll比较识趣,它有个机制,问个一段时间,如果没有回应,就闭嘴了,不在浪费资源了。这两种方式都不是最好的方式,需要很多资源,而Websocket就高明的多了,因为他们根本不是一个物种。
Websocket的高明之处在于,只需要一次HTTP握手,就能完成很多response响应。客户端先发起一个HTTP请求,建立一个Websocket服务,告诉服务器它活了,然后服务器就源源不断的把它的消息发送过去,完全是服务器主动的、实时的,直到你关闭请求,消失不见。
握手阶段采用 HTTP 协议,数据格式轻量,而且只有一次,所以性能开销小,完美解决以上问题。客户端与服务端进行数据交换时,服务端到客户端的数据包头只有2到10字节,客户端到服务端需要加上另外4字节的掩码。HTTP每次都需要携带完整头部,次数多了,数据量还是很大的。
Websocket协议有更好的二进制支持,可以发送文本和二进制数据,有些数据量很大,通讯很频繁的应用,可以使用二进制文件进行数据通讯,进一步提升效率,减小开销。
Websocket协议没有同源限制,客户端可以与任意服务器通信,这样就灵活了,简直就是万金油了。
Websocket协议标识符是ws(如果加密,则是wss),请求的地址就是后端支持websocket的API,给数据安全性上了一道保险。
看似神秘而复杂的Websocket,其实就是带了一层薄薄的面纱而已,揭开之后,不再神秘,只会看到,很美很强悍,请驾驭它!

浙公网安备 33010602011771号