JavaScript⾯试考点之Websocket
WebSocket 是 HTML5 开始提供的⼀种在单个 TCP 连接上进⾏全双⼯通讯的协议。
传统的HTTP协议是⽆状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进⾏处理后返回response结果,⽽服务端很难主动向客户端发送数据;这种客户端是主动⽅,服务端是被动⽅的传统Web模式 对于信息变化不频繁的Web应⽤来说造成的⿇烦较⼩,⽽对于涉及实时信息的Web应⽤却带来了很⼤的不便。
WebSocket就是服务端可以主动向客户端推送消息,客户端也可以主动向服务端发送消息,实现了真正的平等。
特点:1)建⽴在 TCP 协议之上,服务器端的实现⽐较容易。
特点:
2)与 HTTP 协议有着良好的兼容性。默认端⼝也是80和443,并且握⼿阶段采⽤ HTTP 协议,因此握⼿时不容易屏蔽,能通过各种 HTTP 代理服务器。
3)数据格式⽐较轻量,性能开销⼩,通信⾼效。
4)可以发送⽂本和⼆进制数据。
5)没有同源限制,客户端可以与任意服务器通信。
6)协议标识符是ws(如果加密,则为wss),服务器⽹址就是 URL。
浏览器通过 JavaScript 向服务器发出建⽴ WebSocket 连接的请求,连接建⽴以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。当你获取 WebSocket 连接后,你可以通过 send() ⽅法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。
1)WebSo c k et属性
2)WebSo c k et事件前端websocket怎么用
事件
3)WebSo c k et⽅法
2、Websocket 握⼿原理
Websocket的握⼿原理⼤致可分为以下步骤:
第⼀步:客户端发起HTTP请求连接
第⼆步:服务端从请求头中取出Sec-WebSocket-Key的值
第三步:给Sec-WebSocket-Key值拼接⼀个magic_string的到⼀个新的value
第四步:给新的value先做sha1加密再做base64加密
第五步:拼接⼀个响应头
第六步:服务器将拼好的响应头发送给客户端
第七步:客户端解密Sec-WebSocket-Accept得到Sec-WebSocket-Key判断是否握⼿成功
3、WS和WSS区别
a、WS(WebSocket )是不安全的 ,容易被窃听,因为任何⼈只要知道你的ip和端⼝,任何⼈都可以去连接通讯。WSS(Web Socket Secure)是WebSocket的加密版本。
b、WS⼀般默认是80端⼝,⽽WSS默认是443端⼝;WS和WSS的体现形式分别是TCP+WS AS WS ,TCP+TLS+WS AS WS。
其实浏览器并没有严格的限制http下⼀定使⽤ws,⽽不能使⽤wss,经过测试http协议下同样可以使⽤w
ss协议链接。
4、websocket ⼼跳检测和断线重连
websocket是实现前后端交互的长连接,前后端也都可能因为⼀些情况导致连接失效并且相互之间没有反馈提醒。因此为了保证连接的可持续性和稳定性,websocket⼼跳重连就应运⽽⽣。
如果设备⽹络断开,不会⽴刻触发websocket的任何事件,前端也就⽆法得知当前连接是否已经断开。后端websocket服务也可能出现异常,造成连接断开,这时前端也并没有收到断开通知。
需要以前端作为主动⽅,前端定时发送⼼跳消息ping,后端收到ping类型的消息,⽴马返回pong消息,告知前端连接正常。如果因此需要以前端作为主动⽅,前端定时发送⼼跳消息ping,后端收到ping类型的消息,⽴马返回pong消息,告知前端连接正常。如果⼀定时间没收到pong消息,就说明连接不正常,前端便会执⾏重连。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论