본문 바로가기

개발 서적 리뷰/게임서버 프로그래머 책9

서버 분산처리 방법 분산처리 방법기능적 분산처리  vs 데이터 분산처리 ( 수평 방법 )기능적 분산처리기능단위로써, 분산 처리 진행동기적 분산처리 / 비동기적 분산 처리 / 데이터 복제ex) 플레이어 담당 서버 몬스터 담당 서버  ( 플레이어가 몬스터 공격시 로직 )Player Server Monster Server ( message 통신 )1. 플레이어 공격2. 플레이어, 몬스터, 공격 값 "몬스터 서버"에게 전달3. 데미지 로직 결과값 "플레이어 서버"에게 전달4. 처리완료 데이터 분산 처리 (수평 분산 처리)데이터 응집도에 따른 수평 분산처리ex) 같은 서버내의 객체들끼리 같은 서버에서 로직 진행 / 매칭 시스템으로서 같은 계층에 존재하는 객체들간의 같은 서버에서 로직 진행  기능적 분산 처리동기적 분산처리Play.. 2024. 6. 14.
NoSql + 데이터베이스 분산처리 RDBMS 와 NoSQL  ACID 와 BASEACID원자성 : 트랜잭션이 수행되는 동안에, 부분적으로 실행하다가 중단되는 것을 보장함 정합성 : 트랜잭션이 수행된 전과 후가 보장됨독립성 : 트랜잭션이 수행되는 동안 다른 처리 사항이 들어오지 못하도록 보장함지속성 : 트랜잭션이 수행된 후에 영원히 반영됨BASE가용성 중시 ( 일시적으로 비 일관적 상태가 존재하지만, 복제를 통해 일관성을 맞춤 )성능 중시 ( 수평확장이 비교적 쉬움 ) NoSqlTree 구조를 가짐데이터 가용성 (복제본 존재)컬렉션끼리 다른 데이터 구조를 가질 수 있음게임서버의 경우, 로그 DB로 많이 사용됨게임서버에서 NoSql에 데이터 저장시, BSON을 이용해서 insert 진행[추가 자료]Upsert() 함수 : update + i.. 2024. 6. 13.
Many Client Connection (feat, thread / socket / select) client - server 구현 (3)알아야 할 것들Threadmutexchrono ( server 통신 timer로서 사용) Thread 기본 이론하나의 프로세스에서 여러일을 병렬처럼 사용하고자 사용자원 공유 ( Heap 영역 / 전역변수 / 주소공간 / [시그널/ 파일] 핸들러 등등)자원을 공유하기에 같은 곳 동시에 접근하지 않도록 적절한 관리가 필요비동기처리를 할 때에 주로 사용됨 MutexThread에서 자원을 공유하는 부분에 동시에 접근하는 것을 막기 위해 사용이번 예제에서는 출력하는 부분이 일정한 처리가 되지 않아 제대로 출력되지 않는 것에 있어서 mutex를 사용너무 큰 범위의 mutex, 또는 너무 작은 범위의 mutex 사용은 관리의 힘듬을 야기할 수 있음mutex, semaphore,.. 2024. 6. 2.
Socket과 select client - server 구현 (1)알아야할 것들ioctlsocket() : 비동기처리getsockopt() : 소켓 확인select() : 이벤트 처리 부분동기적 처리가 일어나는 부분 ioctlsocket() 함수소켓핸들에 명령을 주어 설정을 하는 함수명령어 목록FIONBIO : 소켓의 동기화/비동기화를 설정FIONREAD : 소켓의 읽을 수 있는 데이터 양 검색SIOCATMARK : 소켓의  urgent 데이터가 있는지 여부 확인SIO_KEEPALIVE_VALS : TCP keep-alive 시간 설정을 변경SIO_GET_EXTENSION_FUNCTION_POINTER : 확장 함수 포인터를 가져옴 (*사용자 명령 사용 가능) getsockopt() 함수소켓의 상태 확인 (연결 중/ 연결 종료/ .. 2024. 6. 2.
Socket 동기 처리 client - server 구현 (1)알아가기전 알아야할 것들동기적 처리가 일어나는 부분 socket library ( ex _ winsock2 )client - server 구현 동기적 처리가 일어나는 부분CLIENTconnect() 과정 : server와 통신연결을 위해 응답이 올때까지 기다린다.send() 과정 : 서버에서 해당 메시지가 제대로 보내는지 확인 과정을 기다린다.recv() 과정 : 서버에서 송신한 데이터가 오는 것을 기다리고, 데이터의 결과를 확인한다.SERVERaccept() 과정 : client와의 연결을 위해 새로운 socket을 생성할 때까지를 기다린다.Listen() 과정까지는 client연결을 기다리는 중이고, accept단계에서 연결작업이 진행된다send() 과정 : 데.. 2024. 6. 2.
Socket의 기본 정리 ( feat, Blocking / Non-Blocking ) 소켓소켓의 경우 파일 핸들작업과 유사파일 핸들 : 파일의 읽고/쓰기를 조작하기 위한 컨트롤소켓 핸들  : 네트워크 연결을 조작하기 위한 컨트롤소켓의 경우 비동기 처리가 주로 사용됨비동기처리의 필요성동기처리일경우, 해당 소켓의 통신과정 동안 사용자 입장에서는 Main 함수가 정지되어있음 (다른 일을 처리하지 못해 멈춰있는것처럼 보임)비동기 방식논블로킹 소켓Overlapped I/Oepoll (linux)I/O Completion Port (IOCP / Window) Blocking 통신 구조클라이언트sock_handle = socket(TCP)sock_handle.bind(any_port)sock_handle.connect(server_ip:port)sock_handle.send()sock_handle.c.. 2024. 5. 30.