Socket.IO中的高延迟

我正在开发一个使用Socket.IO的游戏。 我发现即使在本地主机上运行,​​延迟也非常高,即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); } 

我的问题是,即使在本地networking上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); 

这个function有问题。 如果你设置了一个socket.on这意味着你正在添加许多监听器到同一个事件,这将增加每次迭代的执行。 所以首先,将该socket.on移到setinterval之外。 你的代码是不是也被阻塞了? 假设你的cpu没有和其他的东西一起运行,这可能是一些其他的事件延迟它。

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