더북(TheBook)

이제 데이터가 반대 방향으로 흘러야 한다고 생각해보자. 일부 클라이언트가 여러 사용자에게 방송을 하기 위해 서버로 라이브 비디오 스트림을 보내야 한다. 이를 위해서는 사용자가 가장 최근 보낸 비디오 데이터를 캐시에 넣고 다른 클라이언트가 캐시에 있는 비디오 데이터를 읽게 해야 한다. 다음은 클라이언트가 서버로 1MB 데이터를 새로 보낸 경우를 구현한 코드다.

socket = ...       # 클라이언트가 연결한 소켓
video_cache = ...  # 서버로 들어오는 비디오 스트림의 캐시
byte_offset = ...  # 데이터 버퍼 위치
size = 1024 * 1024 # 데이터 덩어리 크기

chunk = socket.recv(size)
video_view = memoryview(video_cache)
before = video_view[:byte_offset]
after = video_view[byte_offset + size:]
new_cache = b"".join([before, chunk, after])