设计上:

(1)文件数据库是用于处理游戏逻辑业务请求。

(2)mysql数据库是用于处理运营后台查询请求。

(3)备份业务是用于定时备份文件数据库文件。

本文目录: 1、角色数据更新请求

2、mysql业务线程循环处理更新请求 3、文件数据库业务线程循环处理更新请求

4、备份业务线程循环处理备份业务

本文内容:

1、角色数据更新请求

保存角色数据请求,提交到业务线程队列

保存角色描述数据,提交到文件数据库角色描述数据更新列表和mysql角色描述数据更新列表。

保存角色具体数据,提交到文件数据库角色数据更新列表和mysql角色数据更新列表。

VOIDCDBDataClient::CatchSaveCharData(CDataPacketReader &inPacket)

{

INT64nCharId;

DWORDdwDataSize;

inPacket >> nCharId;

inPacket >> dwDataSize;

CGameDataBuffer *pBuffer = m_pDataServer->AllocGameDataBuffer();

pBuffer->AddRef();

pBuffer->SetData(nCharId, inPacket.getOffsetPtr(), dwDataSize);

CharDesc *pCharDesc = m_pLocalDB->GetCharDesc(nCharId);

if(pCharDesc)

{

//跳过角色基本数据头结构

common::DBType::PlayerBasicData *pBaseData =(common::DBType::PlayerBasicData *)\

pBuffer->getPositionPtr(sizeof(common::DBType::DataSectionHeader));

//发起对角色描述数据的更新

pCharDesc->wLevel = pBaseData->wLevel;

pCharDesc->btGender = pBaseData->btGender;

pCharDesc->nUpdateTime = CMiniDateTime::now();

m_pLocalDB->PostUpdateCharDesc(pCharDesc);

m_pSQLDB->PostUpdateCharDesc(pCharDesc);

}

elselogError( _T("试图更新在本地角色描述数据中找不到的角色数据(%lld)"), nCharId);

m_pLocalDB->PostUpdateCharData(pBuffer);

m_pSQLDB->PostUpdateCharData(pBuffer);

pBuffer->Release();

CDataPacket &pack = AllocProtoPacket(DBType::dsSaveCharData);

pack <

pack <

FlushProtoPacket(pack);

}

2、mysql业务线程循环处理更新请求

mysql线程处理循环,处理数据写入mysql请求

VOIDCSQLDB::OnRountine()

{

TICKCOUNT dwStartTick;

while(!terminated())

{

if(!m_boStarted)

{

moon::OS::osSleep(16);

continue;

}

//连接SQL数据库

if(!ConnectSQLDB())

{

moon::OS::osSleep(16);

continue;

}

dwStartTick = _getTickCount();

//处理角色描述更新请求

m_NewCharList.flush();

if(m_NewCharList.count() > 0)

{

ProcessAddNewChars(4);

}

m_UpdateCharDescList.flush();

if(m_UpdateCharDescList.count() > 0)

{

ProcessUpdateCharDescs(4);

}

//处理角色数据更新请求

m_CharDataUpdateList.flush();

if(m_CharDataUpdateList.count() > 0)

{

ProcessCharDataUpdate(4);

}

//处理帮会数据更新请求

m_GuildDataUpdateList.flush();

if(m_GuildDataUpdateList.count() > 0)

{

ProcessGuildDataUpdate(4);

}

moon::OS::osSleep(4);

}

}

3、文件数据库业务线程循环处理更新请求

VOIDCLocalDB::OnRountine()

{

TICKCOUNT dwStartTick;

TICKCOUNT dwBackupTick = 0;

while(!terminated())

{

if(!m_boOpened)

{

osSleep(16);

continue;

}

dwStartTick = _getTickCount();

if((m_nBackupInterval) && (0 == dwBackupTick))

dwBackupTick = _getTickCount();

//处理角色描述更新请求

m_CharDescUpdateList.flush();

if(m_CharDescUpdateList.count() > 0)

{

ProcessCharDescUpdate(4);

}

//处理角色数据更新请求

m_CharDataUpdateList.flush();

if(m_CharDataUpdateList.count() > 0)

{

ProcessCharDataUpdate(4);

}

//处理帮会数据更新请求

m_GuildDataUpdateList.flush();

if(m_GuildDataUpdateList.count() > 0)

{

ProcessGuildDataUpdate(4);

}

if((m_nBackupInterval) && ((INT)(_getTickCount() - dwBackupTick) >= m_nBackupInterval))//每隔一段时间(目前48小时)

{

BackupFDBFiles();

m_ZipBackup.StartZipBackup();//发送信号通知备份业务线程处理备份业务

dwBackupTick = 0;

}

osSleep(4);

}

}

4、备份业务线程循环处理备份业务

备份业务线程阻塞等待通知来处理文件数据库的文件的备份业务。

VOIDCZipBackup::OnRountine()

{

#ifdef WINDOWS

m_hZipBackupEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);

#else

pthread_cond_init(&m_hZipBackupEvent, NULL);

#endif

while(!terminated())

{

#ifdef WINDOWS

::WaitForSingleObject(m_hZipBackupEvent, INFINITE);

#else

pthread_mutex_lock( &m_tx );

pthread_cond_wait( &m_hZipBackupEvent , &m_tx );

pthread_mutex_unlock( &m_tx );

#endif

if(terminated())

break;

DoZipBackup();

CleanBackupFiles();

osSleep(10);

}

#ifdef WINDOWS

::CloseHandle(m_hZipBackupEvent);

m_hZipBackupEvent = NULL;

#else

pthread_cond_destroy(&m_hZipBackupEvent);

#endif

}

mysql 游戏服务器设计_游戏服务器之基于文件数据库和mysql数据库的db服务器设计...相关推荐

  1. 阿里云自动java和mysql数据库_阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程)...

    阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程) (仅此纪念人生第一篇学习博客) 前阵子接了一个小小的JavaWe ...

  2. java毕业生设计心灵治愈服务平台计算机源码+系统+mysql+调试部署+lw

    java毕业生设计心灵治愈服务平台计算机源码+系统+mysql+调试部署+lw java毕业生设计心灵治愈服务平台计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开 ...

  3. java毕业生设计养老机构服务信息管理计算机源码+系统+mysql+调试部署+lw

    java毕业生设计养老机构服务信息管理计算机源码+系统+mysql+调试部署+lw java毕业生设计养老机构服务信息管理计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S ...

  4. java毕业生设计校园一卡通服务平台计算机源码+系统+mysql+调试部署+lw

    java毕业生设计校园一卡通服务平台计算机源码+系统+mysql+调试部署+lw java毕业生设计校园一卡通服务平台计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 ...

  5. java毕业生设计养老智慧服务平台计算机源码+系统+mysql+调试部署+lw

    java毕业生设计养老智慧服务平台计算机源码+系统+mysql+调试部署+lw java毕业生设计养老智慧服务平台计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开 ...

  6. 古剑奇谭3服务器不稳定,古剑奇谭3设置游戏默认存档服务器方法_古剑奇谭3怎么修改游戏启动选项_游戏堡...

    < 修改启动选项: 一些玩家可能知道,Steam游戏可以自行设置游戏启动选项,已达到修改游戏设置.调整画面等目的. 本方法既通过设置游戏启动选项,来修改游戏默认连接服务器. 步骤: 在 Stea ...

  7. 游戏开发论坛_游戏开发制作全流程介绍

    近日,根据<2020年1-6月中国游戏产业报告>显示,我国上半年网络游戏用户规模达到6.6亿人,游戏市场实际营收1394.93亿元,同比增长了22.34%,其中手游占比75.04%,达10 ...

  8. 云服务器网无响应,服务器之家教你dns服务器未响应导致无法上网怎么办

    最近服务器之家在逛网页的时候看到有不少的网友在讨论dns未响应的解决方法,然后服务器之家就给网友们进行解答了这个问题,俗话说"独乐乐不如众乐乐",所以,今天服务器之家我就决定也来和 ...

  9. 3d游戏开发相关概念_游戏开发概念

    3d游戏开发相关概念 Game development is one of the most exciting fields of computer science and a major part ...

最新文章

  1. linux studo命令,在 Linux 上使用 Visual Studio 开发环境
  2. 使用AngularJS 进行Hybrid App 开发已经有一年多时间了,这里做一个总结
  3. 简洁明了——STL容器库之set头文件常用函数集合
  4. 编写java的应用_编写Java应用程序
  5. fckeditor 上传图片 php_fckeditor 上传图片乱码的解决方法_PHP教程
  6. JNDI学习总结(一)——JNDI数据源的配置(转)
  7. 电商渠道转化越来越低,究竟怎样引流才能提高转化率?
  8. CCF NOI1117 排序
  9. 动手动脑(Java)
  10. 百度云搜索引擎森林战士_纯干货:网盘搜索引擎整理
  11. 大数据工程师简历怎么写,更受到HR青睐?
  12. ap计算机知识点总结,AP统计学考试知识点汇总
  13. showModalDialog()、showModelessDialog()方法使用详解
  14. 九江高考2021成绩查询,2021九江市地区高考成绩排名查询,九江市高考各高中成绩喜报榜单...
  15. Vue 事件修饰符.self的用法
  16. LeetCode 1134.阿姆斯特朗数 每日一题
  17. 什么是BI工具?怎么选择好用的BI工具
  18. Idea中自动注释的缩进(避免添加注释自动到行首)
  19. python 正整数因数分解_Python正整数分解质因数
  20. aplayer得使用,记一次aplayer/Aplayer开发心得

热门文章

  1. linux查看日历的命令,Linux终端显示日历信息的命令:ncal命令
  2. FIT2CLOUD飞致云发布开源Linux面板项目1Panel
  3. IDA提取的机器码快速转换方法
  4. wps不小心删除怎么恢复_【】wps表格里的数据误删并点保存了,怎么恢复?
  5. 华为机试题-20190417
  6. AS3 3D 电子相册 (源码+注释+测试+运行效果图)
  7. Java项目:JSP高校教务排课管理系统
  8. laravel 几种第三方接口
  9. 加密体系介绍(LMK、ZMK、ZAK、ZPK)
  10. 游戏本推荐排行榜首选 超好用游戏本介绍