인디 게임 무료 효과음 모음 & 다운
요즘은 모바일 전성 시대 이다 보니 C++를 사용한 개발이 많이 필요 없게 되었다.
필자가 과거 게임 서버 개발 시 Window API : timeGetTime()와 GetTickCount() 관련한 에피소드가
있어 만약에 도움이 될까하여 몇자 적어 봅니다.
온라인 게임 내 각 지역 마다 일정 시간 간격으로 존 보스가 동시 출현하고 동시에 20~30명이 협업 사냥을
통하여 희귀 아이템을 얻는 보스 시스템은 제작하여 서비스 하게되었다.
4시간 마다 정규 적으로 출현하는데 이 보스가 몇 달에 한번씩 2번 출현 거나 출현 시 메세지가 잘못
나오는 현상이 모니터링 되었다. 이상 동작 발생 이후는 또 몇 달 동안 문제가 없이 동작 되었다.
아무리 코드를 봐도 원인을 찾기 어려웠으며 문제가 한번 발생 되면 몇 달 동안 정상 동작하니 귀차니즘
대 마왕인 필자에게는 의지 부족으로 해당 버그를 방치 하게 되었다.
한참 시간 지난 후 해당 문제가 timeGetTime()의 사용에서 발생 한것으로 추측 되었다.
해당 API를 구글링 해 보면 자세한 설명이 나온다.
해당 함수의 설명들 자세히 살펴 보면 반환값이 DWORD이고 최대 49.7일 카운트 유지 된다고 설명이 있다.
보통 필자 같은 경우 시간의 경과를 비교 할대 timeGetTime()을 사용해서 A시점 B시점 경과 시간 만큼 비교하여 로직을 구성 하다 보니 서버 가동 이후 49.7일 될 시점에 해당 값이 최대 값을 넘을때 문제가 발생 했던 것이다.
사내 서버 운영자도 저랑 비숫한 귀차니즘 주의라서 웬만하면 서버 Reboot을 하지 않았다.
어떤 경우 2년동안 서버 Reboot없이 서비스가 운영 되는 경우 가 있었다.
서버 가동후 49.7일 전에 서버를 Reboot해주면 해당 버그는 발생하지 않으나 서버 Reboot도 귀찮아하는
귀차니즘 주의에 입각하여 이런 문제 발생하지 않는 로직을 추가 하게되었다.
게임 서비스 시작 시점의 시간
m_timeAppStart = timeGetTime();
시간 함수 사용시 해당 함수 대체
DWORD timeAppTime()
{
return timeGetTime() - m_timeAppStart;
}
P.S : 실제 버그 수정 여부를 확인을 위하여 50일 가량 서버 Reboot하지 않는 테스트를 진행 하였다.
번호 | 제목 | 등록일 | 조회수 |
---|---|---|---|
10 | 라프 코스터의 재미 이론 | 2/27/2018 | 5089 |
9 | 게임인 필독 도서 : 놀이와 인간 - 로제 카이와 | 1/19/2018 | 4503 |
8 | 게임 예술에서 게임 공학으로 | 5/29/2016 | 3962 |
7 | 게임 개발 이야기 - Window API : rand() | 5/15/2016 | 4507 |
6 | 게임 개발 이야기 - Window API : timeGetTime()와 GeTickCount() | 5/2/2016 | 11803 |
5 | 아저씨 개발자의 미국 아마존 정착기 | 4/15/2016 | 6869 |
4 | 아저씨 개발자의 미국 아마존 진출기 | 4/8/2016 1 | 8329 |
3 | 회사 첫 출근 그리고 입사 교육 | 3/24/2016 | 4700 |
2 | 꼰대 개발자 이야기#2 | 3/21/2016 | 3671 |
1 | 꼰대 개발자 이야기#1 | 3/15/2016 | 29746 |