[NW] Select, WSAEventSelect 모델

seunghyun·2023년 9월 22일
0

Server

목록 보기
4/4

단순 Blocking, NonBlocking 의 단점으로 입출력 모델의 등장했다.

입출력 모델은 네트워크 프로그래밍에서 데이터의 입출력 방식을 정의하는 개념이다. 이는 프로그램이 데이터를 받아들이고 송신하는 방법을 결정한다.

receive, accept 하기 전에 사전체크하는 모델인
Select, WSAEventSelect 모델에 대해서 살펴보자!


Select

select 함수가 핵심이 되는 모델로, 블로킹/논블로킹 소켓을 사용할 때의 단점을 보완하기 위해서, 우리가 바라는 특정 입출력 상황이 만족될 때에서야 accept, receive 를 한다.

언리얼 FPS 네트워크 서버 모델이 select 이라고 한다.


WSAEventSelect

소켓에 대해서 다수의 event 를 동시에 관찰해서 그 중하나라도 완료됨을 감지하면 인덱스로 빠져나와서 인덱스 대상으로 어떠한 이벤트가 일어났는지 탐지해서 처리한다

Windows Sockets API (WSA) 는 Microsoft Windows 운영 체제에서 네트워크 프로그래밍을 위한 API(응용 프로그램 프로그래밍 인터페이스)입니다. 이 API는 소켓 통신을 할 수 있게 해주며, 네트워크를 통해 데이터를 전송하고 수신하는 데 사용됩니다.

WSAEventSelect 함수는 Windows Sockets API의 일부로, 소켓에 이벤트를 연결하여 비동기적으로 소켓 작업을 처리하는데 사용됩니다. 이를 통해 입출력 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있습니다.
WSAEventSelect 함수를 사용하여 소켓에 이벤트를 연결하고, 해당 이벤트가 발생할 때 동작을 수행합니다. 이 또한 논블로킹 소켓을 사용하여 입출력 동작을 처리합니다.

특징

event 랑 소켓 을 일대일로 매핑시켜준다.

단순한 방법이라서, 윈도우 클라에서 네트워크 처리를 해주면 된다.
클라 쪽에선 많은 유저를 들고 있는 것이 아니기 때문이다.
동접 5000이라고 5000개의 소켓을 만들 필요가 없다.
클라는 서버와 자신이 소통할 소켓 딱 하나만 있으면 된다.
클라가 다른 유저와 소통하려면 서버에게 요청하고 받고(receive) 하는 것이다.
단 다른 유저의 아이디를 받아서 시뮬레이션을 해야 하긴 하겠죠.

단점: IOCP 에 비해 느리다? PC 윈도우 외에는 호환되지 않는다. 예를 들어 모바일(리눅스) 에선 빌드가 안되고,, 안돌아간다. 모바일에서 하고 싶다면 리눅스 지원이 되는 select 모델을 채택해야겠죠

참고로 클라와 달리 서버는 환경을 타지 않는다.

0개의 댓글