서버에 IOCP를 이용해 서버를 열고 Unity 게임 어플리케이션과 통신하는 방법에 대해 연구해보겠습니다.
일단 소켓 프로그래밍에서 게임서버의 구조를 알아보았습니다.
게임서버의 구조는 유투버 Tucker님의 강의를 보며 공부했습니다. 그리고 나름대로 정리한 내용은 여기 정리했습니다.
https://diy-multitab.tistory.com/47
유투버 Tucker 님 게임 프로그래밍 강의 : https://www.youtube.com/watch?v=lAhAdnsIN6I&list=PLy-g2fnSzUTDsS7kCzmFYn4BJK6nCs0_r
좀더 알아보니 게임 서버는 기본적으로 소켓프로그래밍으로 다루고 있습니다. 그리고 일반적으로 사용되는 웹서버와는 느낌이 조금 다릅니다. 게임서버를 구현하는 방법은 다양한 방식이 있습니다만 주로는 C++을 이용해 사용됩니다.
C++은 여러버전이 있습니다만 리눅스 운영체제에서 EPoll 방식이 쓰이고 윈도우 운영체제에서는 IOCP 방식을 사용합니다. 그리고 조사한 결과 IOCP가 성능상 약간 우위에 있기도 있고 한국에서는 널리 쓰이고 있는듯합니다. epoll방식과 IOCP 방식은 구현 방법이 조금 다르고 따로 개발되어야합니다.
이러한 점을 보완하기 위해 Boost Asio를 이용하면 윈도우와 리눅스에서 통합적으로 게임 서버의 비동기 프로그래밍을 개발할수 있습니다.
그러면 Unity는 어떨까요. Unity는 C# 언어를 기반으로 만들어지는데 굳이 직접 개발하지 않아도 Photon 같은 네트워크 플랫폼이 있지만 이러만 커스텀 서버와 연동하려면 C#으로 비동기 소켓 프로그래밍을 구현해야합니다.
이번 공부를 통해서 구현해야할 기능은 이러합니다. "IOCP 서버를 이용해 유니티 멀티플레이 캐치볼 게임 구현해라"
물론 구현하는 게임 특성상 P2P 통신으로도 충분히 가능한 수준의 콘텐츠이지만 게임서버 공부도 해보고 비동기 프로그래밍을 연습해보고자 한번 공부하면서, 블로그에 정리하면서 구현해보겠습니다!
'공부 학습' 카테고리의 다른 글
UML 다이어그램 정리 - 활동 다이어그램 (0) | 2022.11.08 |
---|---|
IOCP 서버 프로그래밍 (0) | 2022.08.02 |
C++에서 virtual(가상함수) 란..? (0) | 2022.08.01 |
게임 서버의 이해 (0) | 2022.07.27 |
머신러닝 정리(종합) (0) | 2022.07.25 |