Socket Programming2

5-socket-multiple

1. 쓰레드 프로그래밍

  • 여러 클라이언트를 동시에 처리하는 대표적인 구조로 1개의 프로세스안에서 여러 개의 쓰레드를 만들어서 클라이언트 요청 처리

  • 아래 예제는 소켓 프로그래밍의 서버에서 listen(backlog)로 여러 개의 클라이언트 접속을 하용

2. 블로킹, 논블로킹, Select 멀티플렉싱

  • 배경: network IO와 memory/disk IO간의 성능 차이에 따른 많은 클라이언트 처리 방식

  • 클라이언트가 서버로 100MB 데이터 전송시 read I/O와 write socket I/O를 blocking, non-blocking, select로 처리하는 방식 비교

    • 수신 buffer size는 1KB, 송신 버퍼는 로 제한함

    • non-blocking 전송은 IO 처리시간이 길 때 blocking을 하지 않고 CPU processing을 하기 위해서 이용하는 방식

    • non-blocking 전송을 할 때 select.select(read, write, error) 함수를 호출하여 read, write, or error IO가 가능해질 때 진행하도록 함

  • 아래 예제 참고

  • nonblocking 서버에서 데이터 수신

  • HelloWorld 문자열을 많이 보내는 예제

    • blocking 으로 ? nonblocking으로 ? 아래 2개의 코드 중에서 오류가 발생합니다. 어떤 코드에서 어떤 오류가 발생할까요?

    • sock.setblocking(0) 에 대한 의미는 무엇일까요?

  • nonblocking 코드로 클라이언트에서 전송하는 예입니다.

    • 아래 코드에서는 오류가 발생할까요?

3. 비동기 프로그래밍

  • 다음 도서의 예제를 참고하세요.

    • 파이썬 코딩도장: https://dojang.io/course/view.php?id=7

    • https://dojang.io/mod/page/view.php?id=2469