游戏服务器之运营日志


运营日志是为了运营人员查看游戏运行情况而增加的。把场景服务器的日志信息发送到运营服务器,再写到mysql数据库(方便运营后台查询,一般是php后台)。


设计思想:

1、逻辑线程派送运营日志到运营日志线程的添加队列。

2、每种类型的日志会对应有发送队列和添加队列,运营日志线程需要发送时就从发送队列中获取日志。

3、交换添加队列和发送队列(需要加锁),从发送队列里获取的所有日志(每次最多100个)组成一个消息发送到运营服务器。

4、运营服务器把接收到的日志添加到追加日志队列(需要加锁)。

5、运营服务器的逻辑线程(可以有多个逻辑线程,每个都对应有2个日志队列)检查有没创建表,没有就创建,交换追加日志队列和写入日志队列。

6、运营服务器的逻辑线程把写入日志队列的日志组成一个sql(每次最多处理100个日志),写入mysql。


本文内容:

1、场景服务器派送日志到运营日志线程

2、交换添加日志队列和发送日志队列

3、运营日志线程循环

4、把发送队列日志组成一个消息发送出去(到运营日志服务器)

5、运营日志服务器把日志接收到添加日志队列

6、运营日志逻辑线程(可以有多个,目前有两个)

7、把日志写入mysql

 

1、场景服务器派送日志到运营日志线程。

void operation_log_thread::operationGoodsLogDispatch(uint32 roleId,
uint16 rolelevel,uint32 itemId,uint32 itemBaseId,uint32 preNum,
uint32 lastNum,uint8 loc,uint16 optype,uint32 desc)
{
#if TEST_OPERATION_THREAD
OperationGoodsLog operationLog;
operationLog.fill(roleId,rolelevel,itemId,itemBaseId,preNum,lastNum,loc,optype,desc);
g_operation_log_thread.m_OperationLogLock.lock();
g_operation_log_thread.m_pOperationGoodsLogAppendList->push_back(operationLog);
g_operation_log_thread.m_OperationLogLock.unlock();
#endif
}

2、交换添加日志队列和发送日志队列

void operation_log_thread::changeOperationGoodsLogList()
{
if (m_pOperationGoodsLogToSendingList->empty() && !m_pOperationGoodsLogAppendList->empty())
{
m_OperationLogLock.lock();
//交换待处理运营日志列表与添加运营日志列表
MSGGoodsLogSendingList* pTempList = m_pOperationGoodsLogToSendingList;
m_pOperationGoodsLogToSendingList = m_pOperationGoodsLogAppendList;
m_pOperationGoodsLogAppendList = pTempList;
m_OperationLogLock.unlock(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值