我想制作一款类似Travian(或Ikariam)的网络游戏。游戏将在PHP&基于MySQL的。我想知道如何才能实现游戏属性的实时更新。
对于前端,我可以通过使用AJAX调用(从数据库中获取最新值),甚至虚假更新值(不与服务器通信)来实现。
对于后端,这是由PHP cron作业(每隔几秒运行一次)完成的吗?如果是这样,有人可以提供一些示例代码吗?
顺便说一句,我知道如果我使用IIS + FastCGI会有麻烦。===版本信息===
PHP:5.2.3
IIS:6.0 with FastCGI
操作系统:Windows Server 2003 Standard R2
答案 0 :(得分:6)
正确的答案取决于您的确切需求。
每个人总是以相同的速度获得资源吗?如果是这样,一个简单的解决方案是跟踪用户存在的时间,根据他们获得的费率计算资源量,并减去他们总共花费的资源数量。如果速率可以改变,这将是一个有点问题,所以如果你使用这个解决方案,你几乎坚持你选择的速率,除非你完全重写处理(例如下面的那个)
如果它改变了人们获取资源的速度,您需要定期更新数据。 cronjob /计划任务可以很好地确保每个人都得到更新,但在某些情况下,最好只测量自更新每个用户资源以来的时间,然后在他们制作的每个页面加载时更新它们通过将他们离开的时间乘以他们获得资源的速度来登录 - 这样,您就可以避免更新,直到您确实需要新值。
答案 1 :(得分:1)
每次页面或javascript请求时,您还可以计算资源。您需要存储上次更新的时间。
答案 2 :(得分:1)
对于Travian之类的资源管理,您需要在最后一次更新用户资源时进行跟踪。如果您读取资源值(对于页面刷新或其他内容),您需要添加自“上次更新时间”以来获得的资源量(取决于资源字段数量和用户获得的boni)并将该值发送到浏览器。您也可以让浏览器脚本计算这些金额。
您可能会考虑以某种方式缓存所有资源数量,因为这些值必须很多,从而改善了与数据库的通信。
如果用户完成构建资源字段,使用市场,构建结构等,则需要更新资源量(以及“上次更新时间”),因为您无法简单地跟踪这些事件
通过计算资源减少了数据库负载,因为每次用户刷新浏览器页面时都不需要编写新值。由于您的舍入误差较小,因此它也更准确。
为了在页面刷新之间保持资源增加,您需要一个Frank Farmer描述的方法。只需在一些javascript中嵌入资源量和“增益频率”,并将每个“增益频率”的资源量增加一个。
答案 3 :(得分:0)
它可能是一个旧帖子,但它立即出现在谷歌所以这是另一种选择,这就是我开发的游戏是如何做到的。
我使用客户端JavaScript,它使用闪存套接字从主机上运行的专用游戏服务器获取实时更新。
中的xmlsocket工具包