阅读本文大概需要4分钟。
老陈好久没更新推文了,抱歉抱歉,最近搬家,然后工作上有一些新的体会,所以一直在忙事情。今天还是日常来更新一道我觉得面试会问,但是不一定能答的很好的题,就是websoket是个什么鬼?虽然之前了解过一些,但这次推文查了比较多的资料,更为全面一些。
一、WebSocket协议
WebSocket 是由HTML5提出的一个独立的协议标准。它跟HTTP协议有关系吗?没有。切记,只是说浏览器为了兼容现有的浏览器的握手规范而对HTTP协议的一种补充吧。就是说WebSocket利用了HTTP协议来建立连接。
WebSocket协议有两个关键字: 双向通信协议 长连接通信模式
首先聊一下双向通信协议这个事,就是服务器端和客户端都能够主动向对方发送数据或者接受数据,跟Socket一样。
长连接通信模式,就是客户端断开WebSocket连接或者服务端断开连接之前,不需要客户端和服务端重新发起连接请求。优势就是省带宽,性能有优势,实时性。
二、WebSocket建立的过程
WebSocket的建立必须由浏览器发起,请求是一个标准的HTTP请求,所以说WebSocket的建立是依赖于HTTP。请求报文如下:
GET ws://localhost:3000/ws/test HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Origin: http://localhost:3000
Sec-WebSocket-Key: client-random-string
Sec-WebSocket-Version: 12
该请求和普通的HTTP请求有几点不同:
1.借用HTTP头部字段,Upgrade: websocket
和 Connection: Upgrade
告诉服务器通讯协议由HTTP转为WebSocket。
2.Sec-WebSocket-Key 用来标识这个连接。
3.Sec-WebSocket-Version 指定WebSocke版本。
支持WebSocket的服务器端在确认以上请求后,应返回状态码101 Switching Protocols的响应:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: xxxxxxxxxxxxxxxx
101 表示本次链接的HTTP协议即将被更改,更改后的协议就是指定的WebSocket协议。
版本号与子协议规定服务器和客户端能理解的数据格式,能否支持压缩。 如果只是一个简单的API BOY这方面可以不需要深入了解。
一个WebSocket连接建立之后,浏览器和服务器就可以主动发送消息给对方。 消息有两种,一种是文本,一种是二进制数据,一般我们都是发送JSON格式的文本。
为什么WebSocket连接可以实现全双工通信而HTTP连接不行?实际上两种都是建立在TCP协议上的,TCP本身实现了全双工,只是,HTTP协议的请求应答机制限制了全双工通信。
三、关于WebSocket的使用
我就不赘述怎么使用API,大家可以了解一下WebSocket的几种状态,事件。我来贴地址:
https://developer.mozilla.org...
好了今天就先到这。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。