gpt4 book ai didi

php - 创建一个不断检查表上字段的 MySql 作业或循环

转载 作者:行者123 更新时间:2023-11-29 06:11:50 24 4
gpt4 key购买 nike

嗯,我目前正在开发一款浏览器多人游戏,但对这个概念有一些问题。这是一个类似 Ogame (http://www.ogame.org/) 的使用 PHP/Js/MySql 的游戏。

我想要的是玩家将发起一个 Action (砍柴),并且这个 Action 将在 XX 分钟内结束。

所以基本上我的想法是创建一个动态 cron,它将在 XX 分钟后启动 SQL 查询,将 DB XX 资源添加到播放器。

另一个问题是玩家可以驾驶他们的船在海上航行,因此如果他们要移动到某个目的地,他们将每 5 分钟移动 XX 米。

所以问题是所有玩家都可以在海上看到彼此。所以基本上,我等不及10分钟才能给玩家飞船添加XX米,必须在5分钟后完成......

编辑:所以基本上我需要一个像MySql这样的工作或者一个不断检查表的无限循环。该表将包含所有操作的结束时间(时间戳)。因此,当该时间对应于 CURRENT_TIME 时,作业必须执行 Sql 查询。

希望你们能理解我的问题;)

最佳答案

你想要的是一个“作业系统”,或者“队列系统”,或者“事件系统”,或者“消息队列”。

构建起来可能相当复杂,但简单的版本可能如下所示:

  1. 您有一个数据库表,仅存储“消息”队列,每行一条消息,每条消息都有一些字段指定应何时处理它。要么立即,要么在一段时间后等。
  2. 您的应用程序根据需要插入此表
  3. 您有一个单独的守护进程在运行,其任务是巧妙地处理此队列。例如,它根据您在插入事件行时指定的条件,拉取任何准备处理的事件。然后它处理它们。您可以在永无休止的 while() 循环中运行此脚本,然后将脚本本身作为服务器上的后台进程运行。如果您处理好内存管理,该脚本可以永远运行。

此设置存在很多问题,例如:

  • 如果您需要在多个服务器之间分配任务会怎样?
  • 如果守护进程处理事件的速度比插入新事件的速度慢,会发生什么情况?

避免这些方法的更好解决方案是向第三方托管消息队列服务(如 Amazon SQS)投入一些资金,或使用支持此功能的预构建框架(如 gearman)。这样,您就可以巧妙地从多台机器中一次提取一个事件,而不必真正关心系统的积压程度 - 他们只需愉快地处理事件即可。

关于php - 创建一个不断检查表上字段的 MySql 作业或循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8751867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com