📜  长轮询和 WebSocket 的区别(1)

📅  最后修改于: 2023-12-03 15:12:34.934000             🧑  作者: Mango

长轮询和 WebSocket 的区别

在网络通信中,长轮询和 WebSocket 都可以实现实时通信,但它们有很大的区别:

长轮询

长轮询指的是客户端向服务端发送一个请求,服务端一直等待直到有数据返回或者超时才返回数据给客户端。在这种方式下,客户端需要不断地轮询服务端来获取数据。此方式的缺点是,轮询服务端会消耗大量的资源,因为客户端有可能长时间不返回请求。

// 客户端代码实例
function longPolling() {
  $.ajax({
    url: '/api',
    method: 'GET',
    success: function(data) {
      // 处理数据
      longPolling(); // 循环请求
    },
    error: function() {
      setTimeout(function() {
        longPolling();
      }, 1000); // 超时后再次请求
    }
  })
}
WebSocket

WebSocket 是一种新的协议,它支持全双工通信,能够在客户端和服务端之间建立持久性的连接,直到连接被关闭。在这种方式下,客户端和服务端可以自由地相互发送消息,无需等待或者持续不间断地请求或响应数据,相比于长轮询协议,WebSocket 可以大大减少通信时延,减少服务端资源的消耗。

// 客户端代码实例
var socket = new WebSocket('ws://localhost:8080');
socket.onmessage = function(event) {
  // 处理服务端发回的数据
}
socket.onopen = function(event) {
  // 连接开启时执行的代码
}
socket.onerror = function(error) {
  // 出错时执行的代码
}
总结

长轮询与 WebSocket 都可以实现实时通信,但两种方式的区别在于长轮询需要不断地轮询服务端来获取数据。WebSocket 不需要轮询,只需要建立一次连接即可实现数据通信,节省了服务端的资源。因此,在需要实现实时通信的场景下,WebSocket 的效率更高,更加推荐使用。