0

我正在开发一个网页游戏(js php mysql),其中一个人单击一个按钮来开始一个需要时间才能完成的动作(比如说10个小时),当它完成时,一些分数会被添加到该玩家的总数中。问题是即使玩家在动作完成时不在线,我也需要添加这些积分。例如,我需要更新排名,或者向玩家发送电子邮件。

我想过一个 cron 作业不断检查结束动作,但我认为这会杀死资源(不断检查数千名玩家的动作..)。

这个问题有更好的解决方案吗?

感谢您的关注!!

4

3 回答 3

5

您可以在完成后写入您的数据库,当用户登录时,您可以将获得的积分添加到他的帐户中。您也可以使用 cronjob 进行检查。即使您有数百万用户,也不会杀死您的服务器。

于 2012-06-05T21:42:36.257 回答
0

Cron 非常适合这个。您可以在存储过程中编写您的任务,然后让 cron 运行一个 SQL 脚本来调用将更新您的玩家记录的存储过程。

数据库旨在有效地处理成千上万条信息,因此我不认为它会杀死系统资源的想法是有效的,除非您的托管系统已经受到限制。

于 2012-06-05T21:42:24.337 回答
0

如果您想安全地防止作弊,则无论如何都需要在服务器上进行检查。如果“等待”将发生在客户端的 Javascript 中,则可以轻松减少剩余时间。

因此,您需要将作业发送到服务器(假定可以安全地防止时钟修改),服务器将确定结束时间戳。您可以将作业存储在队列中。

如果您只需要用户本人的此信息,则可以在用户登录时查看队列。否则每分钟(左右)运行一次 cron 作业。该作业将标记所有作业在其时间戳过去时已完成(并将它们从数据库中删除)。

如果您需要更精确的检查,您将需要提出一个更频繁地执行此操作的替代服务器端解决方案(例如,每隔几秒轮询一次数据库的简单程序)。

于 2012-06-05T21:48:28.507 回答