게임 서버 의 파일 데이터베이스 와 my sql 데이터 베 이 스 를 기반 으로 한 db 서버 디자인
(1)파일 데이터 베 이 스 는 게임 논리 업무 요청 을 처리 하 는 데 사 용 됩 니 다.
(2)my sql 데이터 베 이 스 는 운영 배경 조회 요청 을 처리 하 는 데 사 용 됩 니 다.
(3)백업 업 무 는 정시 에 파일 데이터베이스 파일 을 백업 하 는 데 사용 된다.
전체 설계도 http://blog.csdn.net/chenjiayi_yun/article/details/11913207
파일 데이터베이스 업무 디자인 보기 http://blog.csdn.net/chenjiayi_yun/article/details/17880275
본문 목록:
1.캐릭터 데이터 업데이트 요청
2,mysql 업무 라인 순환 처리 업데이트 요청 3,파일 데이터베이스 업무 라인 순환 처리 업데이트 요청
4.백업 업무 스 레 드 순환 처리 백업 업무
본문 내용:
1.캐릭터 데이터 업데이트 요청
캐릭터 데이터 요청 저장,비 즈 니스 스 레 드 대기 열 에 제출
캐릭터 설명 데 이 터 를 저장 하고 파일 데이터베이스 캐릭터 설명 데이터 업데이트 목록 과 my sql 캐릭터 설명 데이터 업데이트 목록 에 제출 합 니 다.
캐릭터 의 구체 적 인 데 이 터 를 저장 하고 파일 데이터베이스 캐릭터 데이터 업데이트 목록 과 my sql 캐릭터 데이터 업데이트 목록 에 제출 합 니 다.
VOID CDBDataClient::CatchSaveCharData(CDataPacketReader &inPacket)
{
INT64 nCharId;
DWORD dwDataSize;
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);
}
else logError( _T(" (%lld)"), nCharId);
m_pLocalDB->PostUpdateCharData(pBuffer);
m_pSQLDB->PostUpdateCharData(pBuffer);
pBuffer->Release();
CDataPacket &pack = AllocProtoPacket(DBType::dsSaveCharData);
pack << (int)0;//SUCCESS
pack << nCharId;
FlushProtoPacket(pack);
}
2.my sql 비 즈 니스 스 레 드 순환 처리 업데이트 요청
my sql 스 레 드 처리 순환,처리 데이터 기록 my sql 요청
VOID CSQLDB::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.파일 데이터베이스 업무 스 레 드 순환 처리 업데이트 요청
VOID CLocalDB::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.백업 업무 스 레 드 순환 처리 백업 업무
백업 업무 스 레 드 가 파일 데이터 베 이 스 를 처리 하 는 파일 의 백업 업 무 를 막 습 니 다.
VOID CZipBackup::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
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.