我有一个多人游戏大厅,用户可以在其中创建私人聊天室并开始私人游戏。每个用户在游戏中都有一个生命条,假设每秒缓慢地再生 x 点。
我想我需要在每个游戏开始时启动服务器端游戏循环,就像这样:
setInterval(update('gameID'),1000);
其中 update('gameID') 增加特定游戏中所有玩家的健康变量,其中 1000 毫秒 = 1 秒。
问题:我是否可以假设这是异步的?我可能有 50 个单独的游戏正在进行,其中 50 个正在运行。主进程不会被阻塞吧?
我有一个多人游戏大厅,用户可以在其中创建私人聊天室并开始私人游戏。每个用户在游戏中都有一个生命条,假设每秒缓慢地再生 x 点。
我想我需要在每个游戏开始时启动服务器端游戏循环,就像这样:
setInterval(update('gameID'),1000);
其中 update('gameID') 增加特定游戏中所有玩家的健康变量,其中 1000 毫秒 = 1 秒。
问题:我是否可以假设这是异步的?我可能有 50 个单独的游戏正在进行,其中 50 个正在运行。主进程不会被阻塞吧?
它是异步的,但在您描述的情况下,您不需要 50 个计时器。
player.attackedTime = (new Date).getTime()
并计算每次攻击的再生,例如player.health += x_points * ((new Date).getTime() - player.attackedTime) / 1000
,但您必须在客户端上进行预测再生。setInterval
当然是异步的。大多数接受回调的函数都是异步的。如果您有任何疑问,可以查看文档或源代码。
它是异步的。但是这样做可能会杀死您的服务器。
我建议让这些间隔被动,即在内存中保存游戏的开始并让客户端 ping 数据。当客户端 ping 服务器检查当前日期并将其与存储的日期进行比较(并在请求结束时更新存储的日期)。它可以从中评估当前的健康状况。
该解决方案应该可以更好地扩展。