You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP在线游戏每秒任务调度问题优化咨询

在线PHP游戏每秒任务处理的性能与可靠性问题

当前实现方式

  • 通过每分钟执行cron job,使用curl -s调用处理脚本
  • 脚本内通过for循环执行59次任务,每次执行$this->doThings()后调用sleep(1),设置set_time_limit(65)避免提前超时

现有核心代码:

set_time_limit(65);
for ($i = 0; $i < 59; ++$i){
    $this->doThings();
    sleep(1);
 }

现存问题

  • 任务超时丢数据:部分场景下整个cron任务耗时超过1分钟,触发超时后导致最后一批队列任务丢失
  • CPU过载:取消超时限制后,出现任务重叠引发的CPU过载问题

业务背景补充

这是一款战争类游戏,核心任务逻辑:

  • 玩家发起攻击时,系统计算两地距离(例如5分钟),将任务存入数据库并设置end_time为当前时间+预计耗时
  • $this->doThings()负责查询所有end_time ≤ 当前时间的待处理任务,按类型执行处理逻辑
  • 此前的超时问题是指cron任务整体超时,导致未完成的最后一批任务丢失;延长超时后,前后两次cron任务的处理逻辑重叠,引发CPU过载

待评估的优化代码

以下代码是否能解决现有问题?

$timelimit = 59; //seconds
set_time_limit($timelimit + 1);
$start_time = time(); //set startup time;

while(((time() - $start_time) < $timelimit) || !$timelimit){
    $this->doThings();
}

需求目标

寻求高效实现方案,满足:

  • 每秒精准执行任务处理
  • 不丢失任何任务数据
  • 不会引发CPU过载

内容的提问来源于stack exchange,提问作者morgi tmr dasdas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:33:22