• 스레드(Thread)(복습) ⇒ 하나의 프로세스 내에서 실행되는 독립적인 실행 흐름

  • 멀티스레드 기반 에코 서버의 확장형 ⇒ “채팅”

  • 한 클라이언트 TCP 세션을 관리하는 개별 스레드가 클라이언트 수 만큼 존재

  • 연결된 모든 클라이언트를 관리하기 위한 자료구조가 필요하면 이 자료구조에 대한 스레드 동기화가 필요하다.

    • 따라서 보다 강도 높은 “안정성” 이 요구됨
    • C 의 연결 리스트 또는 보다 쉽게, C++ STL List 를 활용할 수 있다.
  • 브로드캐스팅(Broadcasting)

    • 하나의 Client 로 부터 받은 데이터를 서버에 connected 된 모든 Client 에게 전달해주는 것
    • connected 될 때의 통신 소켓 정보를 (1) “구조체” 에 [Socket, IP, 포트, 사용자 ID, 소켓 상태 등] 로 묶어 저장하고 , 이러한 구조체들을 (2) 배열, 리스트 등 “컨테이너” 로 관리하여 구현할 수 있다.
    • (2) 컨테이너에 접근하여 브로드캐스팅을 진행할 땐, 하나의 쓰레드만 독점적으로 접근해야하기 때문에 동기화 객체를 사용하여 임계 구간을 설정한다.