- winsock의 개념
- winsock의 역사
- winsock의 종류
- Window message select(WSAAsyncSelect)
- Kernel event select(WSAEventSelect)
- Overlapped I/O(Overlapped)
- Overlapped I/O + IOCP (IOCP)
- Non blocking 개념
- Todo
- Unix network programming, W. Richard Stevens
- MFC
- 소스 분석
- Network game architecture
- Network architecture
- C/S
- P2P
- C/S vs P2P
- Network architecture case analysis
- packet analysis tools
- netstat
- TCPView
- WireShark
- C/S example: poker game
- 서버간 통신을 담당하는 서버
- 어떤 서버로 연결할지 알려주는 서버
- P2P example: Battle.net
- 세션 마이그레이션: P2P 연결에서 host가 나갔을 때, host를 옮기는 과정.
- 유저 간 정보 교환은 UDP로.
- Hole punching
- To do
- netstat research
- TCPView research
- WireShark research
- hole punching research
- DB와 server 연결하기
- 유저 관련 정보: 가입, 탈퇴, 로그인, 친구, 기타등등..
- 게임 컨텐츠: 레벨, 경험치, 아이템, 공격력...
- 인벤토리: 아이템, 수량, 돈...
- 몬스터 정보: 경험치, 레벨, 공격력..
- 사용자 패턴 정보
- 그 외 '정보'라 할만한 모든 것
- DBMS 기초
- [MFC로 구현하는 DB 프로그래밍] ① 로컬 제트엔진 DAO
- [MFC로 구현하는 DB 프로그래밍] ② DB의 다리 ODBC
- [MFC로 구현하는 DB 프로그래밍] ③ 모든 것은 OLE로
- Winsock 과 ADO를 사용한 채팅 시스템
- DB 설계
- DB를 프로그램에 연결
- packet 설계
- To do
- 소스코드 분석
- MySQL 문법 확인
- 로비 서버 만들기 -들어가기에 앞서: 객체의 생명주기, serialization, packet generator 등
- C/S의 생명주기
- Lobby server 제작
- Serialization
- XML
- Protocol Buffer
- JSON
- boost::serialization
- Packet generator 패킷 생성기
- Serialization
- 패킷 정의
- 모든 패킷의 base class 패킷을 만들고 이를 상속하여 실제로 사용할 각 패킷을 작성. polymorphism과 overiding 기법을 사용.
- 각 유저를 구분하는 키는 string보다 int(혹은 long) 형이 성능 측면에서 유리함
- Boost.Acchive
- Boost.Archive 클래스
- Boost.Serialize 클래스
- Asio.Serialization
- 패킷 클래스에 serialize 함수 추가
- serialization
- 더 해야할 것
- 빌드 시 패킷 클래스에 자동으로 serialization 함수를 넣어주는 방법?
- (위에 이어) 각 패킷 클래스별 수신 함수를 자동으로 만들어주는 방법?
- 참고
Player 수 증가에 따른 복잡도 증가(O(n*n)), NAT, session migration 등 어려운 문제가 존재.
여러대의 서버가 sign in process, game lobby, in-game 등 역할을 나눠 각 process를 담당. 이외에
NAT(Network Address Translator=공유기) 뒤에 있는 peer의 IP는 실제 IP가 아니기 때문에 server가 될 수 없음. 이를 해결하기 위해 hole punching 기법 사용.
참고: 실전에서 알아보는 홀펀칭 방법
네트워크 게임 튜터리얼 3 - 데이터베이스 그리고 C/S DB에 들어가는 내용
DB 웹서버 -------- 게임서버 DB가 웹서버와 게임 서버를 연결하는 역할
패킷 검출용 CGeneric class를 만들고 다른 패킷들은 이 클래스를 상속. DWORD head를 통해 패킷의 종류를 판별. 실제로 패킷을 전송 시엔 CDataMessage라는 버퍼용 클래스로 패킷을 감싸고 패킷의 크기는 버퍼클래스의 앞부분 4비트를 통해 표시.
네트워크 게임 튜터리얼 4 - 로비, 그리고 할말이 많다
출처: http://www.gamedevforever.com/ 게임 서버는 Patch server, load balance server, lobby server, game server 등 분산 서버 구조를 이루고 있는데, 필요한 객체 생성 및 초기화 등은 이를 담당하는 서버에서 처리를 해야하고 lobby server는 lobby, game server는 game 등 자신이 담당한 역할에 집중할 수 있게 설계해야함.
텍스트 기반으로 이뤄진 자료구조. 사람이 읽기 쉽지만 너무 커서 게임 서버에서는 잘 쓰지 않음. 멀티플랫폼 사용 가능
구글에서 만든 serialization protocol. 몇몇 기본 자료형과 string 만 보낼 수 있는 등 제약이 있음
Java script 용으로 나온 경량 데이터 교환 포맷. 가벼움. 멀티 플랫폼 가능.
강력한 기능: STL collection을 그대로 serialization. C++ 단일 플랫폼에 대해 사용 가능.
IDL 컴파일러: filename.idl 파일을 만들고 정해진 형식에 따라 필요한 함수를 작성해놓으면 이를 바탕으로 자동으로 소스 코드를 만들어주는 외부 컴파일러. 프라우드넷 IDL 컴파일러 등
파일 스트림을 통해 파일에 읽고 쓸 수 있게 해주는 클래스. serialization을 담당하는 Boost.Serialize는 Boost.Archive 라는 유틸리티 클래스에 기반을 두고 있음. Archive는 serialize를 담당하는 text_oarchive 클래스와 deserialize를 담당하는 text_iarchive 클래스로 구분됨. 클래스 내부에 boost::archive::text_oarchive와 boost::archive::text_iarchive 형 객체를 선언하고 이를 통해 입출력 수행.
클래스 내부에 serialize 함수를 선언
댓글 없음:
댓글 쓰기