如何在 NodeJS 中使用套接字(socket.io)找到客户端的响应时间(延迟)?

2024-01-18

我正在尝试使用 NodeJS 创建一个多人游戏,并且我想同步客户端之间的操作。

查找客户端和服务器之间的延迟(请求返回客户端所需的时间)的最佳方法是什么?

我的第一个想法是客户端 #1 可以发送带有 is 请求的时间戳,因此当客户端 #2 收到客户端 #1 的操作时,他将调整 is 操作速度以消除请求的延迟。 但问题是,两个客户端的系统日期时间可能不相同,因此两个客户端不可能知道客户端 #1 请求的卷轴延迟。

另一个解决方案是使用服务器的时间戳,但现在我如何知道客户端的延迟?


读完所有这些答案后...

……我还是不满意。我访问了官方文档,好吧,好吧,好吧 - 解决方案已经内置了。

你只需要实现它 - 看看我的:

Client

// (Connect to socket).

var latency = 0;

socket.on('pong', function(ms) {
    latency = ms;

    console.log(latency);
});

// Do cool things, knowing the latency...

 Server

var server = require('http').Server(app);

// "socket.io": "^1.7.1"
// Set pingInterval to whatever you want - 'pong' gets emitted for you!
var io = require('socket.io')(server, {pingInterval: 5000});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 NodeJS 中使用套接字(socket.io)找到客户端的响应时间(延迟)? 的相关文章

随机推荐

  • 渲染 razor 模板时自定义 WebViewPage 注入代码

    我正在尝试创建一个自定义 Razor 视图基类 继承WebViewPage 这将为每个正在渲染的视图模板 包括布局和部分视图 注入一些 HTML 以便我在客户端上有每个 Razor 模板开始位置的引用 对它结束的位置不感兴趣 到目前为止我尝
  • 使用惰性数据表时,另一个组件不会更新/第二个组件数据落后于一个请求

    我有一个 PrimeFacesp dataTable并通过实现启用延迟加载LazyDataModel dataTable 保存搜索结果 因此在执行搜索请求时 搜索服务仅检索所需的 分页 数据 效果很好 当使用 ajax 请求时p comma
  • Matter JS - 物理 - 如何定义重元素,难以被小元素移动

    我一直在努力研究 Matter JS 的物理原理 试图让它们正确 我有两个要素 Matter Bodies rectangle 400 400 113 66 frictionAir 1 friction 1 density 0 5 rest
  • SCons - 非标准位置的标头/库

    我正在尝试使用 SCons 编译一个程序 该程序需要一组我已安装在非标准位置的依赖项 我已将依赖项安装在 home dja ocr 中 现在我正在尝试编译主程序 但不知道如何告诉 SCons 在哪里查找库和标头 我已经尝试过 除其他外 sc
  • 使用 python 循环遍历文本文件列表

    编辑 为了更清楚起见 已更新帖子 但还没有答案有帮助 好吧 我的任务是获取一个文本文件 每行有 4 个条目 分别是名字 姓氏 小时数 工资率 我要做一些计算 并将所有这些信息放入 python 的格式化表中 现在 我已经有了将数据输入表中的
  • 语法高亮的正确正则表达式是什么?

    使用 NSRegularExpression 进行语法高亮的正确正则表达式是什么 必须通过以下测试 code comment code comment code code string code code comment code code
  • FlipView 控件在 Windows Phone 8 SDK 中不可用

    FlipView 控件在 Windows Phone 8 SDK 中不可用 实现类似功能的替代方法是什么 这里有几个选项 如果您只想显示固定数量的 页面 您可以使用Panorama http msdn microsoft com en us
  • 赛普拉斯抛出安全错误

    我目前正在使用 Chrome 74 运行 并尝试使用 Cypress 来测试我的应用程序中的样式指南 当我加载 Cypress 时 它会抛出此错误 安全错误 阻止了来源为 http localhost 3000 的框架 访问跨源框架 请告诉
  • 您为网站推荐哪种 PHP CMS? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在建立一个网站 需要使用 CMS 如果我使用已经制作好的 CMS 我需要能够轻松扩展它 您有推荐的特定 CMS 还是我应该自己制作一个 CM
  • Bootstrap:如何更改容器的宽度?

    我使用Twitter Bootstrap开发了一个具有固定容器类的网站 但现在客户希望网站宽度为1000px而不是1170px 我不使用 less 文件 有没有快速的方法来解决这个问题 这是解决方案 media min width 1200
  • 如何在一个文件中定义一个 C 函数,然后从另一个文件中调用它?

    如果我在文件中定义一个函数func1 c 我想从文件中调用它call c 我怎样才能完成这个任务 您可以在文件中放置该函数的声明func1 h 并添加 include func1 h in call c 然后你会编译或链接func1 c a
  • JMS Serializer 忽略 Knp Paginator 的映射

    我在使用 JMS 序列化程序排除某些 KNP Paginator 属性时遇到问题 首先 它包含在composer json中 jms serializer bundle 0 13 knplabs knp paginator bundle 2
  • 从应用程序外部记录按键(VB.net)[重复]

    这个问题在这里已经有答案了 我正在制作一个程序 它使用键盘记录器的功能来确定趋势 问题是我无法制作键盘记录器 我已经完成了大部分内容 但当表单失去焦点时我无法按下按键 我见过有人提到键盘和消息挂钩 但我找不到任何示例或理解任何有关它的文档
  • 如何让 JVM 使用服务器的最大(全部剩余)内存

    我有一个 DFS 算法 java 控制台应用程序 当提供更多内存时 它运行得更快 只是一个 DFS 算法应用程序 既没有 I O 也没有其他外部 JVM 资源使用 它只消耗CPU和内存 该应用程序可以在 1GB 内存下运行 但在 2GB 内
  • ASP.NET Razor 页面下拉列表

    div class form group Html LabelFor model gt model CountyId htmlAttributes new class control label col md 2 div class col
  • numpy 二项式随机数效率低吗?

    我一直在从不同的分布中采样随机数 并且刚刚意识到 numpy 二项式随机数与其他分布相比有多慢 例如 timeit for x in range 100 np random binomial 100 0 5 10000 loops best
  • 单击后退按钮时执行代码 (REACTJS)

    例如 当我浏览一个页面到另一页面时 将执行以下代码 当我单击类别页面列表中的产品时 下面的代码设置一个会话存储键 该密钥将具有类别页面的位置 已滚动多少页面 因此 当产品页面打开时 它会将其密钥保存在会话中 如果再次访问同一类别页面 则会恢
  • 级别的特定记录器

    我正在使用 log4j 进行日志记录 我有一个场景 我必须对不同的严重性使用单独的日志记录 例如 对于包 foo 我必须在控制台中打印严重性为 ERROR 的消息 而我必须在日志文件中打印严重性为 WARN 的消息 我如何配置我的 log4
  • 如何在 PHP 中创建 websockets 服务器

    我正在寻找一个简单的代码来创建 WebSocket 服务器 我找到了 phpwebsockets 但它现在已经过时并且不支持最新的协议 我尝试自己更新 但似乎不起作用 php q
  • 如何在 NodeJS 中使用套接字(socket.io)找到客户端的响应时间(延迟)?

    我正在尝试使用 NodeJS 创建一个多人游戏 并且我想同步客户端之间的操作 查找客户端和服务器之间的延迟 请求返回客户端所需的时间 的最佳方法是什么 我的第一个想法是客户端 1 可以发送带有 is 请求的时间戳 因此当客户端 2 收到客户