2014-02-25 76 views
0

我会尽我所能地解释我的问题。 我不是要求代码,只是为了做到这一点的最佳方法。更新特定时间戳的信息

我想创建一个网页游戏,并使用时间升级的东西,建筑等

例如,建屋1将需要1小时。

因此,我会在用户采取行动时开始保存timestamp+(60*60)

我的问题是,如何更新它的最佳方式?

我想到的一种方法是添加函数,检查用户的每个页面视图是否完成。 但是,如果他没有登录更新不会发生。

我想过的第二种方式是为每个用户的每个页面视图检查注册的每个用户。但它不是有效的,如果没有用户登录,就会出现问题。

有什么建议吗?

+1

预定的cron工作怎么样? –

+0

你可以随时使用crons,但是如果你有很多玩家,你必须每分钟运行一次cron,所以我不确定它是否有效。它可以比每次页面加载手动检查都更好。 – ascx

+0

如果您想使用实时应用程序,请查看NodeJS。 –

回答

1

我让我的游戏简单,没有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代码,不管玩家连接到游戏;只要至少有一个玩家登录,我正在执行一切的进度功能。 这听起来并不那么慢(通过使用访问特定页面的连接播放器更新所有播放器)。你只是有一个'工作'的表,并检查当前时间的计时器。更像是一个获取负面问题的单个查询。

+0

谢谢,但是当用户没有登录时会发生什么?例如,如果用户建造房屋,我希望其他用户查看是否建造房屋,即使用户从未再次登录过。 – OfirH

+0

很高兴你问过我错过的那个问题:)查看我的编辑 – 2014-02-25 17:42:58

+0

谢谢!你真的帮了我! – OfirH