MST

星途 面试题库

面试题:网络编程中WebSocket与长轮询在数据传输方面的区别

请阐述在网络编程里,WebSocket和长轮询在数据传输机制、频率以及实时性方面存在哪些区别,并举例说明在何种场景下各自具有优势。
37.4万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

数据传输机制区别

  • WebSocket:采用全双工通信协议,建立连接后,客户端和服务器可以在任何时刻相互主动发送数据。一旦连接建立,双方就如同直接相连的通道,可随时交流信息 。例如浏览器端使用JavaScript的WebSocket对象创建连接后,ws.send('message')就能向服务器发送数据,同时ws.onmessage事件监听接收服务器发来的数据。
  • 长轮询:客户端发起HTTP请求到服务器,服务器若没有新数据,会保持这个请求打开,直到有新数据或者请求超时才响应客户端。客户端收到响应后,会立即再次发起同样的请求。类似客户端不断敲门问服务器“有没有新消息”,服务器没消息就等着,有消息就回,然后客户端再敲门。

数据传输频率区别

  • WebSocket:连接一旦建立,数据传输频率可由应用根据实际需求灵活控制,不需要频繁地发起新连接。比如实时聊天应用,只要双方有消息,随时可以通过已建立的WebSocket连接发送,频率取决于用户输入消息的速度 。
  • 长轮询:由于每次响应后都需要重新发起请求,即使没有新数据,也会按照设定的频率发起请求,相比之下传输频率较高。例如每10秒发起一次长轮询请求去获取服务器数据,不管数据有无更新,每10秒都会有一次请求往返。

实时性区别

  • WebSocket:实时性非常高,只要一端有数据,立刻就能发送给另一端,因为是全双工连接且没有额外建立连接开销。像股票交易系统实时显示股票价格变动,服务器价格一有更新,马上能通过WebSocket推送给客户端。
  • 长轮询:实时性相对较弱,因为每次请求有一定延迟,且从服务器有新数据到客户端获取到数据,需要等待服务器响应这次长轮询请求。比如在一些简易的消息提醒系统中,若长轮询设置30秒请求一次,那么新消息到达服务器后,客户端可能最长要等30秒才能收到。

优势场景举例

  • WebSocket优势场景
    • 实时游戏:如多人在线对战游戏,玩家操作信息需要实时同步给其他玩家,WebSocket能及时传输每个玩家的动作数据,保证游戏流畅进行。
    • 监控系统:监控服务器、网络设备等状态,一旦设备状态变化,通过WebSocket可立即将变化信息推送给管理端,实现实时监控。
  • 长轮询优势场景
    • 简易消息通知:如一些轻量级的站内信通知系统,对实时性要求不是极高,长轮询实现简单,且能满足一定时间间隔获取新消息的需求,不需要像WebSocket那样复杂的连接管理。
    • 对兼容性要求高的场景:在一些老旧浏览器或者对WebSocket支持不完善的环境中,长轮询作为一种基于HTTP的传统方式,兼容性更好。