Python
Select Module을 이용한 1:N
TCP Socket 통신
시작 전 테스트환경 살피기
Time
2017년 08월 30일
OS
Virtual Box - Linux(Ubuntu 16.04 LTS)
Language
Python 2.7
Socket을 이용한 통신에는 Blocking 이라는 문제가 있다.
Blocking ?
어떤 일이 일어나기를 기다리면서 멍하니 있는 상태, 간단히 말해서 Server와 Client가 서로 데이터를 넘겨주기 만을 기다리는 상태가 된다는 것이다. 일정 시간 이 후 Timeout이 걸려서 Blocking 상태를 벗어나게 도와주는 것이 Select Module 이다.
Select Wathing for I/O completion
select.select( rlist, wlist, xlist[, timeout] )
rlist : 읽을 준비가 될 때 까지 기다린다.
wlist : 쓰기 위한 준비가 될 때 까지 기다린다.
xlist : 예외적인 조건을 기다린다.
[, timeout] : Blocking을 벗어나기 위한 시간.
앞의 3개의 인수( rlist, wlist, xlist )에 대한 값을 반환한다. but 지정한 Time이 지나면 앞의 세 인수( rlist, wlist, xlist )는 빈 list를 반환한다.
Client 주요 code
connection_list = [ sys.stdin, clientSocket ]
read_socket, write_socket, error_socket = select(connection_list, [], [], 10)
- select가 socket 전용 module이 아니라 I/O stream을 위한 module 이기에 입력을 위한 stream도 read_socket 부분에 같이 넣어주어야 Client Prompt 창 에서 입력을 받을 수 있다.
- 10초라는 의미 값을 전달 했기 때문에 읽어 들일 객체가 없으면 비어있는 리스트를 반환한다.
Server 주요 code
connection_list = [ serverSocket ]
read_socket, write_socket, error_socket = select(connection_list, [], [], 10)
- Server는 Prompt 창에서 별도의 입력을 필요하지 않고 Clinet가 던져주는 메시지를 받아 다시 응답하는 역할만 하기 때문에 connection_list에 sys.stdin 을 포함시키지 않았다.
Git HUB 해당 url로 들어가셔서 Download를 누르시면 전체 코드가 담긴 zip 파일이 생성됩니다.
참조내용
3. 파이썬 소켓(socket) 모듈을 사용한 네트워크 프로그래밍 - Python 도서 리뷰
4. 16.1. select — Waiting for I/O completion
'개발자 레니는 지금 - > 소프트웨어와 함께' 카테고리의 다른 글
[ Python ] 접근 제어자 (0) | 2017.09.07 |
---|---|
[ Python ] JSON encoder and decoder (0) | 2017.09.07 |
[ Python ] Thread와 Multiprocessing 차이점 (0) | 2017.08.24 |
[ Python ] Threading GIL 정의 (0) | 2017.08.24 |
[ Python ] Python Documents (0) | 2017.08.24 |