3

我想制作一款类似 Travian(或类似 Ikariam)的网络游戏。游戏将基于 PHP 和 MySQL。我想知道如何实现游戏属性的实时更新。

对于前端,我可以通过使用 AJAX 调用(从数据库中获取最新值),甚至是伪造的值更新(不与服务器通信)来实现。

对于后端,这是由 PHP cron 作业(每隔几秒运行一次)完成的吗?如果是这样,谁能给我一些示例代码?

顺便说一句,我知道如果我使用 IIS + FastCGI 会很麻烦。

=== 版本信息 ===

PHP : 5.2.3

IIS : 6.0 与 FastCGI

操作系统:Windows Server 2003 标准 R2

4

4 回答 4

6

正确答案取决于您的确切需求。

每个人总是以相同的速度获得资源吗?如果是这样,一个简单的解决方案是跟踪他们的用户存在多长时间,根据他们获得的速率计算资源数量,然后减去他们总共花费的资源数量。但是,如果速率可以改变,那将是一个小问题,因此,如果您使用此解决方案,除非您完全重写处理,否则您几乎会被选择的速率所困扰(例如下面的那个) .

如果人们获取资源的速度不同,则需要定期更新数据。一个 cronjob/scheduled 任务可以很好地确保每个人都得到更新,但在某些情况下,最好简单地衡量自从您更新每个用户的资源以来已经过了多长时间,然后在他们制作的每个页面加载时更新它们在登录时,将他们离开的时间乘以他们获得资源的速度 - 这样,您可以避免更新,直到您真正需要新值。

于 2010-01-17T15:57:19.330 回答
1

您还可以在每次页面或 javascript 询问时计算资源。您需要存储上次更新时间。

于 2010-01-17T15:57:07.320 回答
1

对于类似 Travian 的资源管理,您需要跟踪上次更新用户资源的时间。如果您读取资源值(用于页面刷新或其他内容),则需要添加自“上次更新时间”以来获得的资源量(取决于用户获得的资源字段和 Boni 数量)并将该值发送到浏览器。您也可以让浏览器脚本计算这些数量。

您可能会考虑以某种方式缓存所有资源量,因为这些值需要很多,从而改善与数据库的通信。

如果用户完成了资源字段的构建、市场的使用、结构的构建等,您需要更新资源的数量(以及“最后更新时间”),因为您无法简单地跟踪此类事件。

通过计算资源可以减少数据库负载,因为您不需要在每次用户刷新浏览器页面时都写入新值。它也更准确,因为您的舍入误差更少。

为了在页面刷新之间保持资源增加,您需要一种 Frank Farmer 描述的方法。只需在一些javascript中嵌入资源量和“增益频率”,并将每个“增益频率”的资源量增加一。

于 2010-01-17T19:24:50.067 回答
0

这可能是一篇旧帖子,但它会立即出现在 Google 中,所以这里有另一个选项,这就是我一直在开发的游戏是如何做到的。

我使用客户端 JavaScript,它使用闪存套接字从主机上运行的专用游戏服务器获取实时更新。

我使用来自http://devpro.it/xmlsocket/的 xmlsocket 套件

于 2013-09-14T02:29:46.810 回答