对于前端,我可以使用AJAX调用(从数据库获取最新值),甚至可以使用虚假的值更新(不与服务器通信)。
对于后端,这是否通过PHP定时作业完成(每几秒运行一次)?如果是这样,有人能提供给我一些示例代码吗?
顺便说一下,我知道如果我使用IIS + FastCGI将会很麻烦。
=== 版本信息 ===
PHP: 5.2.3 IIS: 6.0 with FastCGI OS: Windows Server 2003 Standard R2
正确的答案取决于您的确切需求。
每个人是否总是以相同的速度获得资源?如果是这样,一个简单的解决方案是跟踪他们的用户存在时间,根据他们获取资源的速率计算资源量,并减去他们总共花费的资源数量。但是,如果速率可以改变,那么如果您使用此解决方案,您就基本上被困在选择的速率中,除非您完全重写处理(例如下面的处理方式)。
如果人们获得资源的速度不同,您需要定期更新数据。cronjob/计划任务可以很好地确保每个人都得到更新,但在某些情况下,直接测量自上次更新每个用户的资源已经过去了多长时间,然后通过将他们离开的时间乘以他们获得资源的速率来更新他们的资源,可能会更好 - 这样,您避免了在实际需要新值之前进行更新。
对于像Travian一样的资源管理,您需要跟踪上次更新用户资源的时间。如果您读取资源值(用于页面刷新或其他操作),则需要根据用户获取的资源字段和奖励数量添加“自上次更新时间以来获得的资源量”,并将该值发送到浏览器。您还可以让浏览器脚本计算这些金额。
您可能需要考虑以某种方式缓存所有资源金额,因为这些值非常重要,可以提高与数据库的通信效率。
如果用户完成建造资源领域、使用市场、建造结构等操作,则需要更新资源数量(和“上次更新时间”),因为您无法简单地跟踪这些事件。
通过计算资源,可以减少数据库负载,因为您不需要在用户刷新浏览器页面时每次写入新值。它也更准确,因为您有更少的舍入误差。
为了在页面刷新之间保持资源增加,您需要像Frank Farmer描述的那样采用一种方法。只需将资源金额和“增益频率”嵌入某些JavaScript中,并且每隔“增益频率”就将资源金额增加一。
这可能是一篇旧帖子,但它在谷歌上很容易被找到,所以这里提供另一个选项,这也是我正在开发的游戏使用的方法。
我使用客户端JavaScript,使用Flash套接字从主机上运行的专用游戏服务器获取实时更新。
我使用http://devpro.it/xmlsocket/提供的xmlsocket工具包。