게임 서버와 클라이언트
패키지 게임에서 게임 서버
데디케이티드 서버
렌더링과 사용자 입력 처리를 전혀 받지 않고, 순전히 클라이언트의 연결을
받는 세션을 처리만 하는 프로그램
서버의 역할
- 온라인 게임에서는 여러사람의 상호 작용을 어디선가 중재해야 한다
- 클라이언트의 게임 로직을 일부 가져간다
게임 클라이언트와 서버의 상호 작용
S-C 상호작용
연결
최초로 클라이언트가 서버와 데이터를 주고받을 준비를 하는 것
요청-응답
클라이언트는 서버에 메시지를 보내고, 서버는 이를 처리한 후 결과를 응답해 줌
능동적 통보
클라이언트에 요청을 보낸 적도 없는데 서버에서 능동적으로 통보 하는 것
EX)Player1이 나를 공격했을 때 체력이 깎이는 것
연결 해제
게임 서버가 하는 일
- 여러 사용자와 상호 작용
- 클라이언트에서 해킹 당하면 안되는 처리
- 플레이어의 상태 보관
게임 서버의 품질
- 안정성
- 확장성
- 성능
- 관리 편의성
안정성
치밀한 개발과 유닛 테스트
유닛 테스트
자동화된 자가 검증
80 : 20 법칙
모든 프로그램 성능의 80%는 20%의 소스 코드에서 나타난다는 파레토 법칙
가정하지 말고 검증하라
봇테스트(스트레스 테스트)
: 사람 대신 컴퓨터를 이용하여 자동으로 작동하는 게임 클라이언트를 대량으로
실행시켜 테스트 하는 것
서버가 불안정할 때 쓰는 방법
서버가 죽더라도 최대한 빨리 다시 살아나게 한다
서버 종료시 자동으로 켜지도록 만드는 프로그램
서버는 죽더라도 최대한 적은 서비스만 죽게 한다
게임월드 하나를 100개의 프로세스로 나눈다면 서버 프로세스가 하나 죽더라도
전체 사용자의 1%만 이용이 중단된다
분산 서버 사용
서버 오작동에 대해서 로그를 남긴다
서버가 비정상 종료될 때 크래시 덤프를 파일로 남기거나 서버가 최근에 받았던 메시지
종류를 파일로 남기는 방법
확장성
서버를 얼마나 많이 설치할 수 있는가 or
사용자 수가 늘어나더라도 서비스 품질이 떨어지지 않고 유지되느냐
수직적 확장
하드웨어를 좋은 것으로 바꾸는 것
수평적 확장
서버 머신 개수를 늘리는 것
성능
얼마나 빨리 처리하는가
서버 성능을 높이는 법
서버의 단위 처리 속도를 높이는 것
서버의 과부하 영역을 분산
코드 프로필링
어떤 함수가 처리 시간을 많이 차지하는지 발견한 후 그 것에 집중 하는 방식
네트워크 프로토콜 최적화
메시지의 양을 줄인다 (메시지 압축)
양자화
정수 혹은 부동소수점 값의 정밀도를 낮추는 대신 값이 차지하는 데이터 크기를
줄이는 방법
메시지 교환 횟수 줄이기
고품질 네트워크 회선을 가진 데이터센터에 서버를 설치
지리적으로 가까운 플레이어끼리 서로 플레이를 유도
P2P 네트워킹
관리 편의성
관리도구
서버 프로그램을 원격으로 관리하는 프로그램 이용
관리도구 기능
- 서버 켜기/끄기
- 동시접속자 수 보기
- CPU, RAM 사용량 보기
서버 구동 환경
온프림
데이터센터에 직접 서버 하드웨어와 운영체제를 설치해서 관리하는 것
클라우드 서버
매우 많은 서버가 모인 집합체
'게임 서버 프로그래밍 > 게임 서버 프로그래밍 교과서' 카테고리의 다른 글
#6. 프라우드넷 (0) | 2020.02.17 |
---|---|
#5. 게임 네트워크 (0) | 2020.02.17 |
#3. 소켓 프로그래밍 (0) | 2020.02.17 |
#2. 컴퓨터 네트워크 (0) | 2020.02.17 |
#1 프로그램과 프로세스 (2) | 2020.02.17 |