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 |