-
[포트폴리오]리니지 네트워크프로그래밍/네트워크 프로그래밍 2014. 7. 5. 14:55반응형
윈소켓을 사용한 네트워크 프로그램
소켓 SELECT 모델을 사용해서
클라이언트와 서버통신을 했습니다.
위 동영상은 간단하게 클라이언트2개만 띄워서 테스트했습니다.
서버는 윈도우 메시지를 사용해서 만들었습니다.
서버 주소만 정확히 적어주면 다른 컴퓨터에서도 접속가능합니다.
간단하게 채팅서버만 구현하였습니다.
Winsock
VisualStudio2008
DirectX9.0
모든 책이 그런 것은 아마 아니겠지만 (사실 아닐꺼라고 믿고 싶다) 대부분 기초적인 네트웍 프로그래밍 – 소켓 사용, Win 32 혹은 소수지만 버클리 소켓 사용 – 이나 단순한 수준의 멀티스레드 프로그래밍에 그 내용 중 상당량을 소진한다. 그리고 정작 중요한 modern한 I/O 모델을 이용한 서버 프로그래밍에 관한 설명은 정말이지 미흡하기 그지없다.
사실 게임 서버, 특히나 애들 장난감이 아니라 MMOG, MMORPG의 서버를 만드는 법을 맛보게라도 해주려면 이런 내용들을 다뤄야 할 것이다.
- 대용량 네트웍 I/O를 다루는 법. 게임 서버 프로그래밍 책이라고 써놓고는 책 내용 절반 ~ 2/3을 할애해가면서 select, EventSelect 같은 것만 설명해주는 것은 좀 문제가 있다†. Win32의 I/O completion port; IOCP나 linux의 /dev/epoll 같은 것을 사용해서 어떻게 네트웍 I/O를 처리할지 설명해줘야 한다. 단순히 API 사용법 뿐만 아니라 소켓 버퍼 관리 문제, 패킷 생성 / 메시지 해석 문제 등 많은 부분이 있는데 이에 대한 최소한의 설명이라도 있어야 하겠다.
- 멀티스레딩을 사용할 때의 동기화/타이밍 문제. 사실 시스템 프로그래밍에 가까운 것이지만 서버 프로그래머들이 하는 거의 모든 코드의 바닥에는 멀티스레딩 문제가 깔려 있다. 물론 OS나 시스템 프로그래밍 적인 지식이 깔려있어야하지만 그래도 몇 가지 시스템 프로그램 모델들은 설명해줘야 할 것이다.
- 서버 사이드 스크립팅. 서버에서 모든 것을 다 C/C++ …요즘이라면 C#도 가능할지도 모르지만 여튼 이런 류의 주류 언어로 하는 것은 힘들다. 많은 부분은 데이터기반;data-driven하게 짜야하며 그런 부분에서 동적으로 사용하기 쉬운 스크립트 언어들 – lua, GameMonkey, … – 이 빛을 발한다. 게임 좀 개발했다는 회사들치고 내부 스크립트 언어나 잘 커스터마이징된 기존 스크립트언어가 없는 곳은 아마 없을걸?
- 게임 로직의 동기화문제. 여러 개의 게임 객체들이 하나의 상태를 공유하게 되는데, 이를 동기화하면서도 클라이언트 쪽에서 예쁘게 보이게 하기 위한 방법들은 상당한 다양성과 장단점들을 가지고 있다. 이런 것에 대한 이해가 게임 월드 자체를 시뮬레이트하는 쪽에서는 필수적으로 알아야 한다.
- 각 네트웍/시스템 프로그래밍 API의 코너 케이스에 해당하는 부분들에 대한 간략한 리스팅. 게임 서버 프로그래밍을 할 때에는 네트웍/멀티스레딩 등등에서 정말 수많은 함정들이 기다리고 있다(…).
- 인증 / 보안 관련 이슈들. 클라이언트는 적의 손에 란 말이 있다(물론 서버도 약간은 적의 손에 있다 ). 클라이언트가 사실 상 해킹당한 상태에서도 서버에서 이를 인지하고, 대응하기 위한 방법들을 설명해줄 필요가 있다.
반응형'프로그래밍 > 네트워크 프로그래밍' 카테고리의 다른 글
html와 Node.js 웹소켓서버 (3) 2016.10.12 IOCP게임서버 동기화 패킷처리 (0) 2016.10.12 게임서버 만들기 3 (0) 2014.06.25 서버만들기 2 (0) 2014.06.25 게임서버 만들기-1 (0) 2014.06.25