더북(TheBook)

request_chunk 요청을 받아서 요청에 해당하는 20MB의 데이터를 돌려주는 서버측 핸들러를 어떻게 구현할 수 있을까? 이 예제의 경우 서버의 명령과 제어 부분은 이미 만들어져 있다고 가정하자(아이템 76 “스레드를 사용한 I/O를 어떻게 asyncio로 포팅할 수 있는지 알아두라”에서 이런 작업에 필요한 기능을 살펴볼 수 있다). 여기서는 요청받은 데이터 덩어리를 메모리 캐시에 들어 있는 수 기가바이트 크기의 비디오 정보에서 꺼내서 소켓을 통해 클라이언트에게 돌려주는 과정에 집중하겠다. 다음 코드는 서버 핸들러 구현이다.

socket = ...            # 클라이언트가 연결한 소켓
video_data = ...        # video_id에 해당하는 데이터가 들어 있는 bytes
byte_offset = ...       # 요청받은 시작 위치
size = 20 * 1024 * 1024 # 요청받은 데이터 크기
chunk = video_data[byte_offset:byte_offset + size]
socket.send(chunk)