我正在开发一个网页游戏(js php mysql),其中一个人单击一个按钮来开始一个需要时间才能完成的动作(比如说10个小时),当它完成时,一些分数会被添加到该玩家的总数中。问题是即使玩家在动作完成时不在线,我也需要添加这些积分。例如,我需要更新排名,或者向玩家发送电子邮件。
我想过一个 cron 作业不断检查结束动作,但我认为这会杀死资源(不断检查数千名玩家的动作..)。
这个问题有更好的解决方案吗?
感谢您的关注!!
我正在开发一个网页游戏(js php mysql),其中一个人单击一个按钮来开始一个需要时间才能完成的动作(比如说10个小时),当它完成时,一些分数会被添加到该玩家的总数中。问题是即使玩家在动作完成时不在线,我也需要添加这些积分。例如,我需要更新排名,或者向玩家发送电子邮件。
我想过一个 cron 作业不断检查结束动作,但我认为这会杀死资源(不断检查数千名玩家的动作..)。
这个问题有更好的解决方案吗?
感谢您的关注!!
您可以在完成后写入您的数据库,当用户登录时,您可以将获得的积分添加到他的帐户中。您也可以使用 cronjob 进行检查。即使您有数百万用户,这也不会杀死您的服务器。
Cron 非常适合这个。您可以在存储过程中编写您的任务,然后让 cron 运行一个 SQL 脚本来调用将更新您的玩家记录的存储过程。
数据库旨在有效地处理成千上万条信息,因此我不认为它会杀死系统资源的想法是有效的,除非您的托管系统已经受到限制。
如果您想安全地防止作弊,则无论如何都需要在服务器上进行检查。如果“等待”将发生在客户端的 Javascript 中,则可以轻松减少剩余时间。
因此,您需要将作业发送到服务器(假定可以安全地防止时钟修改),服务器将确定结束时间戳。您可以将作业存储在队列中。
如果您只需要用户本人的此信息,则可以在用户登录时查看队列。否则每分钟(左右)运行一次 cron 作业。该作业将标记所有作业在其时间戳过去时已完成(并将它们从数据库中删除)。
如果您需要更精确的检查,您将需要提出一个更频繁地执行此操作的替代服务器端解决方案(例如,每隔几秒轮询一次数据库的简单程序)。