Socket.IO中的高延迟

时间:2014-09-30 10:14:03

标签: node.js websocket socket.io

我正在使用Socket.IO开发游戏。我发现延迟非常高,即使在localhost上运行也是250毫秒。这是正常的吗?

以下是我用来计算延迟的代码:

function startLatencyPoller(socket,callback)
  {
      setInterval(function() {
      var startTime = Date.now();
      socket.emit('ping');
      socket.on('pong', function() {
        latency = (Date.now() - startTime) /2; //round trip time / 2
        callback(latency);
  });
}, 2000);

}

我的问题是,即使在本地网络上,Socket.IO的正常延迟是否高达250毫秒,以及是否有办法进一步减少它。

编辑: 我检查了运输工具,现在我正在使用websocket作为运输工具。

编辑: 根据以下答案编辑代码后问题已得到解决(删除监听器避免堆积):

setInterval(function() {

     var startTime = 0;
     var socketFunction = function() {
        latency = (Date.now() - startTime) /2; //round trip time / 2
        callback(latency);
        socket.removeListener('pong',socketFunction);
    };

    socket.on('pong', socketFunction);
    startTime = Date.now(); 
    socket.emit('ping');


}, 5000);

2 个答案:

答案 0 :(得分:2)

此功能存在问题。如果你setinterval一个socket.on它意味着你要向同一个事件添加许多监听器,这将增加每次迭代的执行。首先,将socket.on移除到setinterval之外。你的代码也不是在某处阻塞吗?假设你的cpu没有遇到其他正在运行的东西,它可能会延迟它的其他事件。

答案 1 :(得分:0)

  1. 确保在测量ping之前等待一秒左右,因为初始连接套接字可能会阻塞系统资源,从而导致更长的ping时间。可能要为ping检查添加计时器。
  2. Localhost /开发环境应该有一些开销ping,因为它可能不是专用的Web服务器。