WebSocket的11个面试常见知识点

WebSocket的11个面试常见知识点
最新回答
初心

2021-03-13 14:26:59

WebSocket的11个面试常见知识点

  1. WebSocket与HTTP的主要区别

    连接方式:WebSocket提供持久的连接,通过握手过程建立连接后保持打开状态;HTTP是无状态的,每次请求都需要重新建立连接。

    数据格式:WebSocket支持文本和二进制数据的传输;HTTP主要是传输文本数据。

    数据传输方式:WebSocket实现了全双工通信,客户端和服务器可以同时发送和接收数据;HTTP是单向的,客户端发起请求,服务器响应数据。

    协议标识:WebSocket使用ws://或wss://前缀标识;HTTP使用http://或https://。

  2. WebSocket的优势和适用场景

    优势:实时性、双向通信、较低的网络开销、更高的性能、跨域支持。

    适用场景:实时聊天应用、股票行情推送、实时协作编辑、多人游戏、实时数据监控等。

  3. WebSocket的连接建立过程

    客户端发送WebSocket握手请求,请求头包含Upgrade和Connection字段,指定协议升级和建立连接。

    服务器收到握手请求后,验证请求头的字段,并返回握手响应,响应头包含Upgrade和Connection字段,以及一个随机的Sec-WebSocket-Key字段。

    客户端收到握手响应后,验证响应头的字段,并生成一个Sec-WebSocket-Accept值进行验证。

    验证通过后,WebSocket连接建立成功,客户端和服务器可以开始进行实时通信。

  4. WebSocket的事件及其作用

    open:连接成功建立时触发,用于执行初始化操作或发送初始数据。

    message:从服务器接收到新消息时触发,用于处理接收到的数据。

    error:出现连接错误时触发,用于处理错误并采取适当措施。

    close:连接关闭时触发,用于执行清理操作或重新连接等。

  5. 在浏览器端创建和使用WebSocket对象

    使用new WebSocket(url)创建一个WebSocket对象,其中url为服务器的WebSocket地址。

    通过设置onopen、onmessage、onerror、onclose事件处理函数来处理不同的连接状态和数据传输。

    使用send()方法发送消息到服务器。

  6. 发送和接收消息,以及发送二进制数据的方法

    使用send()方法发送文本或二进制数据到服务器。

    接收到的消息在onmessage事件处理函数中处理,可以通过event.data获取消息内容。

    发送二进制数据时,send()方法传递一个ArrayBuffer或Blob对象。

  7. 处理错误和关闭连接的方法

    通过设置onerror事件处理函数来处理错误。

    通过设置onclose事件处理函数来执行清理操作或重新连接等。

    使用close()方法显式地关闭WebSocket连接。

  8. WebSocket的安全性和跨域问题处理

    使用wss://前缀建立加密的安全连接,确保数据的安全性。

    WebSocket遵循同源策略,只能与同源的服务器建立连接。跨域问题可以通过CORS(跨域资源共享)进行访问控制。

  9. 处理连接状态的变化和重连机制

    通过监听open、error和close事件来处理连接状态的变化。

    当连接关闭时,可以根据需要执行重连机制,如使用指数退避算法进行重连。

  10. WebSocket的性能优化和注意事项

    减少数据量:合理控制发送的数据量大小。

    心跳机制:定时发送心跳消息保持连接活跃。

    数据压缩:使用压缩算法减少网络传输的数据量。

    服务器端优化:合理配置服务器端的连接数和资源管理。

  11. WebSocket与长轮询的优缺点比较

    WebSocket

    优点:实时性高、双向通信、较低的网络开销。

    缺点:部分老旧浏览器可能不支持,服务器需要支持WebSocket协议。

    长轮询

    优点:兼容性好、实现简单。

    缺点:延迟较高、需要频繁发送请求增加服务器负载。