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没有和其他的东西一起运行,这可能是一些其他的事件延迟它。
- 确保在testingping之前等待一秒左右,因为初始连接套接字可能会堵塞系统资源,从而导致更长的ping时间。 可能要添加一个计时器到您的ping检查。
- 本地主机/开发环境应该有一些开销ping,因为它可能不是一个专用的networking服务器。
- 在Mac OS X上产生的NodeJS进程的pipe道中未处理的stream错误
- NodeJS返回来自HMAC的其他二进制结果,而不是php
- 使用node.js进行Firebase服务器login:databaseAuthVariableOverride“SyntaxError:意外的标识符”
- 处理节点js和mongooseasynchronous保存和redirect
- 用两个configuration创build一个webpack.config,但插件相同
- p5.js用椭圆canvas绘制path
- 使用单独的API调用将消息列表存储在数组中
- 如何将gulp-uncss-task用于远程文件
- 在Node.js中使用Express.js获取POST参数