mysql 游戏服务器设计_游戏服务器之基于文件数据库和mysql数据库的db服务器设计...
设计上:
(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服务器设计...相关推荐
- 阿里云自动java和mysql数据库_阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程)...
阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程) (仅此纪念人生第一篇学习博客) 前阵子接了一个小小的JavaWe ...
- java毕业生设计心灵治愈服务平台计算机源码+系统+mysql+调试部署+lw
java毕业生设计心灵治愈服务平台计算机源码+系统+mysql+调试部署+lw java毕业生设计心灵治愈服务平台计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开 ...
- java毕业生设计养老机构服务信息管理计算机源码+系统+mysql+调试部署+lw
java毕业生设计养老机构服务信息管理计算机源码+系统+mysql+调试部署+lw java毕业生设计养老机构服务信息管理计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S ...
- java毕业生设计校园一卡通服务平台计算机源码+系统+mysql+调试部署+lw
java毕业生设计校园一卡通服务平台计算机源码+系统+mysql+调试部署+lw java毕业生设计校园一卡通服务平台计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 ...
- java毕业生设计养老智慧服务平台计算机源码+系统+mysql+调试部署+lw
java毕业生设计养老智慧服务平台计算机源码+系统+mysql+调试部署+lw java毕业生设计养老智慧服务平台计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开 ...
- 古剑奇谭3服务器不稳定,古剑奇谭3设置游戏默认存档服务器方法_古剑奇谭3怎么修改游戏启动选项_游戏堡...
< 修改启动选项: 一些玩家可能知道,Steam游戏可以自行设置游戏启动选项,已达到修改游戏设置.调整画面等目的. 本方法既通过设置游戏启动选项,来修改游戏默认连接服务器. 步骤: 在 Stea ...
- 游戏开发论坛_游戏开发制作全流程介绍
近日,根据<2020年1-6月中国游戏产业报告>显示,我国上半年网络游戏用户规模达到6.6亿人,游戏市场实际营收1394.93亿元,同比增长了22.34%,其中手游占比75.04%,达10 ...
- 云服务器网无响应,服务器之家教你dns服务器未响应导致无法上网怎么办
最近服务器之家在逛网页的时候看到有不少的网友在讨论dns未响应的解决方法,然后服务器之家就给网友们进行解答了这个问题,俗话说"独乐乐不如众乐乐",所以,今天服务器之家我就决定也来和 ...
- 3d游戏开发相关概念_游戏开发概念
3d游戏开发相关概念 Game development is one of the most exciting fields of computer science and a major part ...
最新文章
- linux studo命令,在 Linux 上使用 Visual Studio 开发环境
- 使用AngularJS 进行Hybrid App 开发已经有一年多时间了,这里做一个总结
- 简洁明了——STL容器库之set头文件常用函数集合
- 编写java的应用_编写Java应用程序
- fckeditor 上传图片 php_fckeditor 上传图片乱码的解决方法_PHP教程
- JNDI学习总结(一)——JNDI数据源的配置(转)
- 电商渠道转化越来越低,究竟怎样引流才能提高转化率?
- CCF NOI1117 排序
- 动手动脑(Java)
- 百度云搜索引擎森林战士_纯干货:网盘搜索引擎整理
- 大数据工程师简历怎么写,更受到HR青睐?
- ap计算机知识点总结,AP统计学考试知识点汇总
- showModalDialog()、showModelessDialog()方法使用详解
- 九江高考2021成绩查询,2021九江市地区高考成绩排名查询,九江市高考各高中成绩喜报榜单...
- Vue 事件修饰符.self的用法
- LeetCode 1134.阿姆斯特朗数 每日一题
- 什么是BI工具?怎么选择好用的BI工具
- Idea中自动注释的缩进(避免添加注释自动到行首)
- python 正整数因数分解_Python正整数分解质因数
- aplayer得使用,记一次aplayer/Aplayer开发心得