Node.js async setInterval游戏循环?

时间:2012-06-12 13:29:13

标签: node.js

我有一个多人游戏游戏,用户可以创建私人聊天室并开始私人游戏。每个用户在游戏中都有一个健康栏,假设每秒慢慢再生x点。

我想我需要在每场比赛开始时启动服务器端游戏循环,这就是:

setInterval(update('gameID'),1000);

更新('gameID')增加1000 ms = 1秒的特定游戏中所有玩家的健康变量。

问题:我认为这是异步的吗?我可能会有50个单独的游戏,其中50个正在运行。主要过程不会被阻止吗?

3 个答案:

答案 0 :(得分:1)

它是异步的,但在你描述的情况下你不需要50个定时器。

  1. 您可以使用单个计时器重新生成活动游戏中的玩家。如果你也在推送健康数据,这将是非常低效的。
  2. 您可以执行player.attackedTime = (new Date).getTime()之类的操作,并计算每次攻击的重新生成,例如player.health += x_points * ((new Date).getTime() - player.attackedTime) / 1000,但您必须在客户端进行预测性重新生成。

答案 1 :(得分:0)

setInterval当然是异步的。大多数采用回调的函数都是异步的。如果您有任何疑问,可以查看文档或源代码。

答案 2 :(得分:0)

它是异步的。但这样做会杀死你的服务器。

我建议将这些间隔设为被动,即将游戏的开始保持在内存中并使客户端ping数据。当客户端ping服务器检查当前日期并将其与存储日期进行比较时(并在请求结束时更新存储的日期)。它可以从中评估当前的健康状况。

此解决方案应该更好地扩展。