멀티 플렉싱이란 **다중 접속 서버**를 구현하는 방법 중의 하나이다.
멀티 플렉싱의 원리를 거칠게 설명하면 아래와 같다.

  1. 서버가 소켓을 열고 listen한다.
  2. 여러 클라이언트가 서버에 연결 요청을 한다.
  3. 서버는 요청한 모든 클라이언트와의 연결을 수락하고, 연결된 소켓을 별도의 관리 테이블에 저장한다.
  4. 서버는 내부적으로 연결된 소켓에서 발생하는 이벤트를 무한 반복문을 통해 감시한다.
    1. 이 때의 이벤트는, 클라이언트에서 데이터를 소켓에 전송해 커널 영역에 데이터가 세팅되어 서버와 연결된 소켓이 read가 가능해진 상태가 되는 이벤트를 의미한다.
    2. 서버는 select 등의 시스템 콜을 사용하여 이벤트를 감지한다.
  5. 클라이언트가 연결된 소켓에게 데이터를 전송한다.
    1. 데이터가 커널 영역에 저장되어 read 호출이 가능해지면 이벤트가 발생한다.
    2. 서버는 계속 무한 반복문을 통해 이벤트를 감시한다.
  6. 서버에서 무한 루프를 통해 관리 테이블에 저장한 소켓의 이벤트를 감시하다가, 이벤트가 발생한 것을 감지하고 클라이언트의 요청을 처리한다.
  7. 서버에서 요청을 처리한 이후 클라이언트와 연결된 소켓을 해당 클라이언트에게 응답을 반환한다.

이후 멀티 플렉싱에 관련된 자세한 기술은 select 문서를 참고하자.


참고자료

윤성우의_열혈_TCP_IP_소켓_프로그래밍