2021-03-13 14:26:59
WebSocket的11个面试常见知识点
WebSocket与HTTP的主要区别
连接方式:WebSocket提供持久的连接,通过握手过程建立连接后保持打开状态;HTTP是无状态的,每次请求都需要重新建立连接。
数据格式:WebSocket支持文本和二进制数据的传输;HTTP主要是传输文本数据。
数据传输方式:WebSocket实现了全双工通信,客户端和服务器可以同时发送和接收数据;HTTP是单向的,客户端发起请求,服务器响应数据。
协议标识:WebSocket使用ws://或wss://前缀标识;HTTP使用http://或https://。
WebSocket的优势和适用场景
优势:实时性、双向通信、较低的网络开销、更高的性能、跨域支持。
适用场景:实时聊天应用、股票行情推送、实时协作编辑、多人游戏、实时数据监控等。
WebSocket的连接建立过程
客户端发送WebSocket握手请求,请求头包含Upgrade和Connection字段,指定协议升级和建立连接。
服务器收到握手请求后,验证请求头的字段,并返回握手响应,响应头包含Upgrade和Connection字段,以及一个随机的Sec-WebSocket-Key字段。
客户端收到握手响应后,验证响应头的字段,并生成一个Sec-WebSocket-Accept值进行验证。
验证通过后,WebSocket连接建立成功,客户端和服务器可以开始进行实时通信。
WebSocket的事件及其作用
open:连接成功建立时触发,用于执行初始化操作或发送初始数据。
message:从服务器接收到新消息时触发,用于处理接收到的数据。
error:出现连接错误时触发,用于处理错误并采取适当措施。
close:连接关闭时触发,用于执行清理操作或重新连接等。
在浏览器端创建和使用WebSocket对象
使用new WebSocket(url)创建一个WebSocket对象,其中url为服务器的WebSocket地址。
通过设置onopen、onmessage、onerror、onclose事件处理函数来处理不同的连接状态和数据传输。
使用send()方法发送消息到服务器。
发送和接收消息,以及发送二进制数据的方法
使用send()方法发送文本或二进制数据到服务器。
接收到的消息在onmessage事件处理函数中处理,可以通过event.data获取消息内容。
发送二进制数据时,send()方法传递一个ArrayBuffer或Blob对象。
处理错误和关闭连接的方法
通过设置onerror事件处理函数来处理错误。
通过设置onclose事件处理函数来执行清理操作或重新连接等。
使用close()方法显式地关闭WebSocket连接。
WebSocket的安全性和跨域问题处理
使用wss://前缀建立加密的安全连接,确保数据的安全性。
WebSocket遵循同源策略,只能与同源的服务器建立连接。跨域问题可以通过CORS(跨域资源共享)进行访问控制。
处理连接状态的变化和重连机制
通过监听open、error和close事件来处理连接状态的变化。
当连接关闭时,可以根据需要执行重连机制,如使用指数退避算法进行重连。
WebSocket的性能优化和注意事项
减少数据量:合理控制发送的数据量大小。
心跳机制:定时发送心跳消息保持连接活跃。
数据压缩:使用压缩算法减少网络传输的数据量。
服务器端优化:合理配置服务器端的连接数和资源管理。
WebSocket与长轮询的优缺点比较
WebSocket:
优点:实时性高、双向通信、较低的网络开销。
缺点:部分老旧浏览器可能不支持,服务器需要支持WebSocket协议。
长轮询:
优点:兼容性好、实现简单。
缺点:延迟较高、需要频繁发送请求增加服务器负载。