본문 바로가기
게임 개발/Game Server

[Asio 소켓 서버 개발] 1 - ASIO란?

ASynchronous I/O = 비동기 입출력

 

Boost.Asio is a cross-platform C++ library for network and low-level I/O programming that provides developers with a consistent asynchronous model using a modern C++ approach.

Asio는 네트워크 프로그래밍을 위한 C++ 라이브러리다.

오픈소스이며 크로스 플랫폼을 지원하고 무료로 사용 가능하다.

모던 C++로 만들어진 비동기 입출력 모델을 제공한다. 

 

서버와 클라이언트가 정보를 주고 받으려면 서로 연결되어야 하는데 이 연결이 바로 네트워크다. 

서버와 클라이언트 모두 네트워크 시스템이 구축되어 있어야 패킷을 주고 받는다든지 하는 일을 수행할 수 있다. 

 

게임서버에 ASIO를 사용할 이유는?

일반적으로 1:1 관계의 서버 / 클라이언트보다

n개의 클라이언트가 동시에 붙고 동시에 여러 일을 처리할 수 있는 비동기 서버가 필요한 경우가 많다.

 

 

 

음... 근데 내가 왜 asio 서버를 구축해야하는거지?

이 이유에 대해서 생각해보지 않았다 .... (이걸로 하자고 해서 하는거임)

근데 다른 것도 아니고 asio를 해야하는 이유를 내가 납득해야할 것 같다.

이 고민의 결과는 아래에서 마저 주절 거리겠다. 

 

 

 

 

비동기 소켓 서버 만들기

어찌저찌 만들면 가능은 하겠지만.. 잘 만들기 쉽지 않다.

이 때 활용할 수 있는 검증된 라이브러리가 있는데 이는 Boost의 Asio Library이다.

 

 

시작 안내 문서

https://www.boost.org/doc/libs/1_82_0/more/getting_started/index.html

나는 1_82_0 버전을 사용할거라서.. 버전에 따라 url 수정하면 된다. 

 

 

 


왜 ASIO 서버인가?

 

Sync vs Async  (동기와 비동기)

- 동기 : 직렬적 처리 방식. 요청이 들어오면 순차적으로 작업을 수행하고, 해당 작업이 수행 중이면 다음 작업은 대기.

서버는 한 번에 많은 요청이 들어오며 동시에 많은 요청을 처리해야 하기 때문에 동기를 사용하기 적절치 않다.

 

- 비동기 : 병렬적 처리 방식. 요청이 들어오면 해당 요청에 대한 작업이 끝나지 않았더라도 요청을 계속 받는다.

작업이 끝났다는 이벤트(알림)가 오면 해당 요청을 처리한다. 이러한 비동기 방식이 네트워크 관리에 더 적합하다. 

 

+) 호출된 함수의 종료를 호출한 함수가 처리하느냐, 호출된 함수가 처리하느냐 (호출한 함수가 선행된 함수로 보면 됨) 

 

일단, 앞서 말한 것 처럼 하나의 서버에 다수의 클라를 붙이려면 동기보다는 비동기 서버가 필요하다.

=> Async

 

TCP/IP Socket 기반 서버를 제작할 때

multi
1. -processing : 클라마다 새로운 프로세스를 생성 => 서버 부하
2. -threading : 클라마다 새로운 스레드를 생성 => 서버 부하 
3. -plexing : 여러 개의 입력을 하나의 출력으로? = 여러 개의 클라를 하나로 처리(여러 개의 프로세스, 스레드 X) 

=> Multiplexing 

 

Blocking vs Non-Blocking

- 블로킹 : 

 


 

참고 자료 출처

 

 

[Asio 서버 개발] 2 - ASIO 서버 개발 참고 사이트

Boost 공식 문서https://www.boost.org/doc/libs/1_82_0/more/getting_started/index.html Githubhttps://github.com/light8reeze/LBEngine Blog[Curl] libcurl 빌드 및 Visual Studio 2019 프로젝트 적용I/O 모델 설명Boost Asio에 대해서 알아보

continuedeve.tistory.com

 

 

 

'게임 개발 > Game Server' 카테고리의 다른 글

[Asio 서버 개발] 2 - ASIO 서버 개발 참고 사이트  (0) 2024.08.19
MMOPRG 서버 유튜브 강의  (0) 2023.11.05
IOCP란?  (0) 2023.03.26