适用于游戏中事件记录的体系结构

时间:2015-01-05 12:09:56

标签: c++ mysql events game-engine

我正在尝试修改游戏引擎,以便记录事件(如按键),并将它们存储在远程服务器上的MySQL数据库中。游戏引擎是用C ++编写的,我目前有以下简单的架构,使用mysql ++直接INSERT记录到适当的数据库中:

Direct game to MySQL architecture

不幸的是,连接到MySQL服务器时会有很大的开销,游戏会停止很长时间。将一批X值的事件推送到服务器会导致游戏玩法显着延迟(60秒的事件可能需要12秒才能同步)。将MySQL端口公开访问显然存在安全问题。

我正在考虑另一种选择,而是将命令发送到服务器,服务器可以在自己的时间内与数据库进行交互:

Indirect game to server architecture

这里游戏只发送必要的信息(例如要更新的表和要插入的数据)。我不确定速度增加是否足够,或者哪种系统适合管理游戏发送的命令。

Someone else suggested Log4j,但显然我需要一个C ++解决方案。是否有适当的现有框架来实现我想要的目标?

1 个答案:

答案 0 :(得分:3)

大多数收集用户界面交互数据的应用程序(在您的情况下都是按键)将其放入某种本地文件中。

然后在适当的时间(例如在游戏结束时或另一个游戏的开始),他们将该文件(通常以压缩形式)发布到可公开访问的Web服务器。 Web服务器上的软件解压缩数据并将其加载到分析系统(在您的情况下为MySQL服务器)中进行处理。

所以,我建议如下。

  1. 停止向您不了解和信任的人提供您的MySQL服务器端口。
  2. 让你的游戏以某种方式在本地收集击键。
  3. 当游戏不是实时模式时,让它以大串上传数据。
  4. 编写Web服务以接收和解释这些文件。
  5. 通过这种方式,您可以构建更安全的分析系统和更具响应性的游戏。