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