我是新来的游戏服务器设计,现在分配给一个任务来重构我们的日志服务器。我为游戏服务器和日志服务器之间的通信创建了一个类日志。MMO游戏的设计日志服务器
class Log
{
public:
void encode(Encoder& encoder) const;
int decode(Decoder& decoder);
private:
std::string sql_cmd;
}
在游戏服务器上,有一个用于向日志服务器发送日志请求的类。
class LogHelper
{
public:
static void LogItemChange(const GameShare::GameItem& item, const PackageChangeDetails& pcd);
{
Log log(get_item_change_sql(item,pcd);
send_to_log_server();
}
private:
static std::string get_item_change_sql(const GameShare::GameItem& item, const PackageChangeDetails& pcd);
}
的问题是:
我应该生成游戏服务器上的SQL文本?如果在游戏服务器上生成sql文本,对游戏服务器的性能有没有影响?
如果不在游戏服务器上生成sql文本,那么应该在日志服务器上生成sql文本。我应该将GameItem和PackageChangeDetails实例数据发送到日志服务器,它会使日志服务器复杂化,是否有任何人拥有良好的身份?
如果日志服务器控制日志的数据库,那么它也应该控制它的SQL语言。如果做得对,其余代码甚至不应该关心 - 更不用说知道 - 记录器背后的实现。日志记录可能会对性能产生巨大影响,并且由于您的经验不足,您必须向其他团队寻求帮助,并确保使用准备好的语句以避免SQL注入(请查看您的数据库选择C++如果你不知道这是什么意思)。 – pickypg
感谢您的回复。日志服务器控制数据库的日志,并执行sql命令。问题是在游戏服务器上生成sql之间的选择,然后发送sql字符串到日志服务器或发送日志数据到日志服务器,并与数据服务器生成sql?对于sql注入部分,由于日志模块与玩家没有直接的交互,所以不必担心。 – ark
问题是在游戏服务器上生成sql之间的选择,然后将sql字符串发送到日志服务器或发送日志数据到日志服务器并使用数据生成sql [server] - 这个词应该被删除,不知道如何编辑它,所以重播。 – ark