1

我目前正在开发一个用于教育目的的游戏。

游戏是一个小型聊天,每个玩家都有一个人物。这个人物的位置写在 MySQL 数据库中,每次玩家移动他的人物时都会更新。

目前,游戏每 60 帧更新一次所有玩家的位置并在游戏客户端中更改它们。数据库的性能并不是我唯一关心的问题,因为这会导致游戏帧率下降到 30-50 fps 左右。

显然,这会为每个玩家每秒生成 1 个位置更新查询(游戏以 60fps 运行)。考虑到比我和几个朋友更大的用户,我可以想象这可能是一个问题。

一个标准的租用网络服务器能够处理这个问题吗?我该如何改进它?(它不能每秒更新一次位置)

我希望你有一些想法:-)

4

2 回答 2

1

此类数据在每次更改后并没有真正保存到数据库中,而是保存在某种内存上下文中,以便访问速度更快。您存储在数据库中的内容是更改频率较低的内容,例如每分钟一次。

您可能会定期将当前内存中的上下文快照到数据库。也就是说,每分钟左右你都会“保持”游戏状态,这样如果引擎崩溃,它就可以从那个点恢复。如果您创建正确的体系结构,这不会比定期调用方法更困难。

某些事情可能会立即持久化,以避免人们利用发生的动作与永久记录该动作之间的这种滞后。例如,任何使用游戏内货币的交易都会被立即记录下来,而内存中的缓存对于这些交易是不可信的。

对于人数较少的玩家,比如不到一百人,使用商品 VPS 应该没有问题。要容纳更多玩家,您必须非常小心以提高效率。

于 2012-12-02T12:14:44.563 回答
0

您可以使用内存中的 Java 数据库,它允许您更频繁地更新播放器。然后以较低频率将更改存储在 MySQL 数据库中。

于 2012-12-02T18:14:18.360 回答