首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Socket.IO中的高延迟

Socket.IO中的高延迟
EN

Stack Overflow用户
提问于 2014-09-30 10:14:03
回答 2查看 2.3K关注 0票数 1

我正在用Socket.IO开发一个游戏。我发现即使在本地主机上运行,延迟也很高,即250毫秒。这正常吗?

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

代码语言:javascript
复制
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 ms是否是正常的,以及是否有进一步减少延迟的方法。

编辑:我检查了传输,现在我使用websocket作为传输。

编辑:按照下面的答案(删除侦听器,避免它们堆积),在编辑代码之后,问题已经解决了:

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-05 10:36:58

这个函数有一个问题。如果设置间隔为socket.on,则意味着要向同一个事件添加许多侦听器,这将增加每次迭代时的执行量。首先,将这个socket.on移到setinterval之外。你的代码是不是也被阻塞了?假设您的cpu没有被其他正在运行的东西所困扰,它可能是一些其他事件延迟了它。

票数 2
EN

Stack Overflow用户

发布于 2017-07-22 20:53:22

  1. 在测量ping之前,一定要等待一秒钟左右,因为初始连接套接字会阻塞系统资源,从而导致更长的ping时间。可能需要在ping检查中添加一个计时器。
  2. 本地主机/开发环境应该有一些开销ping,因为它可能不是专用的not服务器。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26118264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档