在将来的某个确切时间点运行PHP脚本或函数

在将来的某个确切时间点运行PHP脚本或函数,php,time,future,schedule,Php,Time,Future,Schedule,我目前正在开发一款带有PHP后端的浏览器游戏,需要在将来的特定变化点执行某些检查。Cron作业并没有真正为我削减它,因为我需要秒级的精度。以下是一些背景信息: 该游戏是多人游戏和回合制 在创建游戏室时,游戏创建者可以指定每次操作的最大时间30秒-24小时 一旦玩家执行一个动作,他们应该只有指定的时间来执行下一个动作,或者轮到下一个玩家 出于显而易见的原因,我不能仅仅通过Javascript跟踪时间,因为这太容易操作了。我也不能每分钟安排一个cron作业,因为它可能会延迟30秒 解决这个问题最有效

我目前正在开发一款带有PHP后端的浏览器游戏,需要在将来的特定变化点执行某些检查。Cron作业并没有真正为我削减它,因为我需要秒级的精度。以下是一些背景信息:

该游戏是多人游戏和回合制 在创建游戏室时,游戏创建者可以指定每次操作的最大时间30秒-24小时 一旦玩家执行一个动作,他们应该只有指定的时间来执行下一个动作,或者轮到下一个玩家

出于显而易见的原因,我不能仅仅通过Javascript跟踪时间,因为这太容易操作了。我也不能每分钟安排一个cron作业,因为它可能会延迟30秒

解决这个问题最有效的方法是什么?我无法想象每秒查询一个数据库会对服务器非常友好,但这是我目前倾向的方向[1]

任何帮助或反馈都将不胜感激

[1] :

用户进行移动 调用一个PHP函数,将MySQL表的游戏行中的“switchTurnTime”设置为“TIMESTAMP” 一个总是在后台运行的PHP脚本会在表中查询“switchTurnTime”已过的任何游戏,切换回合并重置时间。
您始终可以使用队列或守护进程。这仅在您具有服务器的shell访问权限时有效

每次需要在特定时间执行操作时,请将其添加到具有延迟的队列中。我用过豆茎,取得了不同程度的成功

这样你有很多选择。以下是两个间隔为6秒的示例:

每分钟使用一个cron作业添加10个作业,每个作业的延迟为6秒 编写一个在后台守护进程中运行的简单PHP脚本,以每6秒向队列添加一个新作业
现在我将采用以下方法,因为它似乎是最容易实现和测试的方法,并且可以部署在不同类型的服务器/主机上,同时仍然可以可靠地运行

设置cron作业以每分钟运行一个PHP脚本。 在该脚本中,首先执行一个查询以查找将在这分钟内结束时间的候选对象。 启动while循环,直到59秒过去。 在这个循环中,检查每个候选人的重新定义时间。 如果超过了时间限制,请对该特定候选对象执行另一个查询,以确保结束时间没有更改。 如果有,则将其作为必需项重新添加到候选队列中。如果没有,在我的情况下采取相应的行动:将回合切换到下一个玩家。
希望这将有助于在未来的人,干杯

这么多人使用错误的语言php来制作游戏,不管怎样,一个php守护进程会让人想到Cron作业是什么。@Dragon-Heh,我选择了php,因为无论我在哪里托管它,它都是现成的。=守护进程听起来不错;您是否考虑按照我在[1]上发布的内容使用它,或者完全使用其他内容?“整个网络对我来说还是一个全新的领域。”普特凡德说真的吗?你读过我的问题吗?你有一台专用的机器,因为共享主机通常不支持mysql事件它本身就是数据库中的一种守护程序,你只能用它更新mysql表。不过,一旦我有了守护程序,作业调度程序会不会变得不必要,因为我可以直接调用PHP函数?还是我遗漏了什么?当然。工作队列使事情易于管理,但它肯定是一个额外的层次,有时不必要的复杂性。这里有一个关于创建守护进程的快速谷歌搜索:好的,找到了。我会等待一段时间,看看是否有其他答案弹出,但如果没有,这可能是我将采取的路线,我会接受你的答案。谢谢=