我让我的游戏简单,没有crons。 当玩家想要的东西,需要时间,我刚刚更新了他的数据库中的信息与结束这项工作的合适时间(列只是一个例子)
UPDATE player SET jobend = UNIX_TIMESTAMP() + (60*60*4) # ending in 4 hours
然后,每个页面有大约剩余时间的信息,我只是用这样的:
SELECT (jobend - UNIX_TIMESTAMP()) AS jobremaining FROM player
我使用strftime格式正确的时间,我是显示给用户。 在剩余时间为负的情况下,工作完成。 由于用户在连接时能够完成某项工作,因此不需要进行绝对计数。
当玩家只是改变页面或做别的事情时,我有一个功能,我只是检查所有及时的事件,而用户在线(所以捕捉任何负面的计时器),然后呈现与JavaScript的任何变化(我张贴的JavaScript计数器对于每一页)
现在,如果你谈论实时更新,cron是方式,但你确定你会需要它的游戏吗?我自己也问过这个问题,答案不是。
编辑
如果其他玩家看到buildings on schedule
页面(假设一个页)我在做相同的计算;如果某个特定玩家的时间刚刚变为负值(无论其他玩家是否看到该页面),我只需在建筑物(在数据库中进行所有更改)就给他奖励,即使他的离线。这没有什么坏处,因为反正他什么都做不了。其他球员只会看到他有一座建筑。这里的关键是我执行所需的更新PHP代码,不管玩家连接到游戏;只要至少有一个玩家登录,我正在执行一切的进度功能。 这听起来并不那么慢(通过使用访问特定页面的连接播放器更新所有播放器)。你只是有一个'工作'的表,并检查当前时间的计时器。更像是一个获取负面问题的单个查询。
预定的cron工作怎么样? –
你可以随时使用crons,但是如果你有很多玩家,你必须每分钟运行一次cron,所以我不确定它是否有效。它可以比每次页面加载手动检查都更好。 – ascx
如果您想使用实时应用程序,请查看NodeJS。 –