멀티 플렉싱이란 **다중 접속 서버**를 구현하는 방법 중의 하나이다.
멀티 플렉싱의 원리를 거칠게 설명하면 아래와 같다.
- 서버가 소켓을 열고 listen한다.
- 여러 클라이언트가 서버에 연결 요청을 한다.
- 서버는 요청한 모든 클라이언트와의 연결을 수락하고, 연결된 소켓을 별도의 관리 테이블에 저장한다.
- 서버는 내부적으로 연결된 소켓에서 발생하는 이벤트를 무한 반복문을 통해 감시한다.
- 이 때의 이벤트는, 클라이언트에서 데이터를 소켓에 전송해 커널 영역에 데이터가 세팅되어 서버와 연결된 소켓이 read가 가능해진 상태가 되는 이벤트를 의미한다.
- 서버는 select 등의 시스템 콜을 사용하여 이벤트를 감지한다.
- 클라이언트가 연결된 소켓에게 데이터를 전송한다.
- 데이터가 커널 영역에 저장되어 read 호출이 가능해지면 이벤트가 발생한다.
- 서버는 계속 무한 반복문을 통해 이벤트를 감시한다.
- 서버에서 무한 루프를 통해 관리 테이블에 저장한 소켓의 이벤트를 감시하다가, 이벤트가 발생한 것을 감지하고 클라이언트의 요청을 처리한다.
- 서버에서 요청을 처리한 이후 클라이언트와 연결된 소켓을 해당 클라이언트에게 응답을 반환한다.
이후 멀티 플렉싱에 관련된 자세한 기술은 select 문서를 참고하자.
참고자료