用于在游戏中记录事件的适当架构
Appropriate architecture for event logging in a game
我正在尝试修改游戏引擎,以便它记录事件(如按键),并将这些事件存储在远程服务器上的 MySQL 数据库中。游戏引擎是用 C++ 编写的,我目前有以下简单的架构,使用 mysql++ 直接 INSERT
记录到适当的数据库中:
不幸的是,连接到 MySQL 服务器时会产生很大的开销,并且游戏会停止很长时间。将一批价值 Xs 的事件推送到服务器会导致游戏玩法出现显着延迟(价值 60s 的事件可能需要 12s 才能同步)。让 MySQL 端口可公开访问显然也存在安全问题。
我正在考虑另一种选择,而不是向服务器发送命令,它可以在自己的时间内与数据库交互:
这里游戏只会发送必要的信息(例如 table 更新和数据插入)。我不确定速度增加是否足够,或者什么系统适合管理从游戏发送的命令。
Someone else suggested Log4j,但显然我需要一个 C++ 解决方案。是否有合适的现有框架来完成我想要的?
大多数收集用户界面交互数据(在您的情况下是击键)的应用程序将其放入某种本地文件中。
然后在适当的时间(例如在游戏结束时或另一场游戏开始时),他们 POST 将该文件(通常以压缩形式)发送到可公开访问的 Web 服务器。 Web 服务器上的软件解压缩数据并将其加载到分析系统(在您的情况下为 MySQL 服务器)进行处理。
所以,我建议如下。
- 停止让您的 MySQL 服务器端口可供您不认识和不信任的人使用。
- 让您的游戏以某种方式在本地收集击键。
- 让它在您的游戏未处于实时模式时大量上传数据。
- 编写一个网络服务来接收和解释这些文件。
这样您将构建更安全的分析系统和响应更快的游戏。
我正在尝试修改游戏引擎,以便它记录事件(如按键),并将这些事件存储在远程服务器上的 MySQL 数据库中。游戏引擎是用 C++ 编写的,我目前有以下简单的架构,使用 mysql++ 直接 INSERT
记录到适当的数据库中:
不幸的是,连接到 MySQL 服务器时会产生很大的开销,并且游戏会停止很长时间。将一批价值 Xs 的事件推送到服务器会导致游戏玩法出现显着延迟(价值 60s 的事件可能需要 12s 才能同步)。让 MySQL 端口可公开访问显然也存在安全问题。
我正在考虑另一种选择,而不是向服务器发送命令,它可以在自己的时间内与数据库交互:
这里游戏只会发送必要的信息(例如 table 更新和数据插入)。我不确定速度增加是否足够,或者什么系统适合管理从游戏发送的命令。
Someone else suggested Log4j,但显然我需要一个 C++ 解决方案。是否有合适的现有框架来完成我想要的?
大多数收集用户界面交互数据(在您的情况下是击键)的应用程序将其放入某种本地文件中。
然后在适当的时间(例如在游戏结束时或另一场游戏开始时),他们 POST 将该文件(通常以压缩形式)发送到可公开访问的 Web 服务器。 Web 服务器上的软件解压缩数据并将其加载到分析系统(在您的情况下为 MySQL 服务器)进行处理。
所以,我建议如下。
- 停止让您的 MySQL 服务器端口可供您不认识和不信任的人使用。
- 让您的游戏以某种方式在本地收集击键。
- 让它在您的游戏未处于实时模式时大量上传数据。
- 编写一个网络服务来接收和解释这些文件。
这样您将构建更安全的分析系统和响应更快的游戏。