我正在使用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);
答案 0 :(得分:2)
此功能存在问题。如果你setinterval一个socket.on它意味着你要向同一个事件添加许多监听器,这将增加每次迭代的执行。首先,将socket.on移除到setinterval之外。你的代码也不是在某处阻塞吗?假设你的cpu没有遇到其他正在运行的东西,它可能会延迟它的其他事件。
答案 1 :(得分:0)