【发布时间】:2012-09-04 14:54:12
【问题描述】:
我是游戏服务器设计的新手,现在被分配到重构我们的日志服务器的任务。我创建了一个类 Log 用于 Game server 和 Log server 之间的通信。
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++,如果你不知道这是什么意思)。
-
感谢您的重播。日志服务器控制日志的数据库,它将执行 sql 命令。问题是在游戏服务器上生成 sql 然后将 sql 字符串发送到日志服务器或将日志数据发送到日志服务器并使用数据服务器生成 sql 之间的选择?对于sql注入部分,由于log模块与播放器没有直接交互,所以不用担心。
-
问题是在游戏服务器上生成sql然后将sql字符串发送到日志服务器或将日志数据发送到日志服务器并使用数据[服务器]生成sql-这个词应该删除,不知道怎么编辑,所以重播一遍。