我正在创建一个基于浏览器的 MMO,它具有基于时间的事件:即建造一座建筑物需要 23 小时。
我可以将其记录在我的 MySQL 数据库中,然后使用 cron 脚本或watch
(这个问题非常有帮助)循环遍历事件表(或等效表)。
似乎有一个普遍的共识,即我可以:
(1) 为处理事件及其相关触发器的脚本每秒运行一次 cron 作业。
(2) 每分钟运行一个 cron 作业,每秒循环 59 次迭代,处理事件及其相关触发器。
(3) 用于watch
每秒运行一个 php 脚本。
本质上,在事件完成后,脚本将处理一些触发器,这些触发器的范围从改变状态、更新数据库、触发在最近事件之后排队的其他“事件”等等。
我最大的担忧来自每秒可能处理 10,000 多个事件和触发器。我可以使用哪些策略来避免性能问题?这些都是解决方案,还是有更好的选择?
示例事件:
Construction of Building A - 00:43:21
快进 2601 秒并执行以下触发器:
Place Building A on map at Location x,y
Update resource total given by building
Start timer on next building in the queue
Construction of Building B - 02:10:49
为了更好地解释:在游戏的早期阶段,这些事件将需要 5 分钟到 1 小时不等。在游戏的后期,这些事件将相隔数百小时。我需要实时处理这些事件,因为它们会影响游戏的其他方面(例如资源结构会提高每小时提供的资源量)。因此,无论用户是否处于活动状态,这些事件都需要由服务器处理。理论脚本将检查过期事件,然后根据该事件,运行与所述事件过期相关的其他几种方法。