【面试】问到WebSocket,我开始慌了

阅读本文大概需要4分钟。

老陈好久没更新推文了,抱歉抱歉,最近搬家,然后工作上有一些新的体会,所以一直在忙事情。今天还是日常来更新一道我觉得面试会问,但是不一定能答的很好的题,就是websoket是个什么鬼?虽然之前了解过一些,但这次推文查了比较多的资料,更为全面一些。

一、WebSocket协议

WebSocket 是由HTML5提出的一个独立的协议标准。它跟HTTP协议有关系吗?没有。切记,只是说浏览器为了兼容现有的浏览器的握手规范而对HTTP协议的一种补充吧。就是说WebSocket利用了HTTP协议来建立连接。

WebSocket协议有两个关键字: 双向通信协议 长连接通信模式

首先聊一下双向通信协议这个事,就是服务器端和客户端都能够主动向对方发送数据或者接受数据,跟Socket一样。

长连接通信模式,就是客户端断开WebSocket连接或者服务端断开连接之前,不需要客户端和服务端重新发起连接请求。优势就是省带宽,性能有优势,实时性。

【面试】问到WebSocket,我开始慌了_第1张图片

二、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: websocketConnection: 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...

好了今天就先到这。

你可能感兴趣的:(前端,websocket)