idea·blog

소켓 응용 2/5 · FLOW

큰 파일은
조금씩 보내야 합니다.

빠른 송신자가 느린 수신자에게 계속 밀어 넣으면 버퍼가 쌓입니다. 청크, backpressure, 체크섬과 이어받기를 눈으로 확인합니다.

이 편의 핵심 질문수신자가 느릴 때 송신자는 무엇을 해야 할까?버퍼가 차면 멈추고
비면 다시 보내기

나쁜 결과와 안전한 결과를 비교하세요

느린 수신자에게 큰 파일을 보냅니다

보는 순서제어 없음 선택버퍼 관찰체크섬 비교

  1. 1분할
  2. 2밀어 넣기
  3. 3과부하
  4. 4검증
실험 시작을 누르면 첫 장면부터 움직입니다1 / 8 전송
file.bin8개 청크
전송 버퍼12%WRITE · 계속 전송
수신 디스크1 / 8 저장
1저장2남음3남음4남음5남음6남음7남음8남음

전체 체크섬전송 뒤 확인

계속 밀어 넣기 시나리오입니다. 실험 시작을 눌러 네 장면을 따라가세요.

시작 전

화면에서 코드로 옮길 때

이 편의 원리 세 가지

01경계는 직접 만듭니다.

TCP 바이트 스트림 위에 길이, 청크 번호와 전송 ID를 붙입니다.

02느리면 잠시 멈춥니다.

쓰기 버퍼가 차면 drain 같은 신호까지 생산을 멈춥니다.

03완료는 검증 뒤에 확정합니다.

청크 개수만 보지 않고 전체 길이와 체크섬을 확인합니다.

구현 체크리스트

최소 네 조각으로 시작하세요.

데모의 시각 요소를 실제 프로토콜 필드와 런타임 동작으로 옮기면 됩니다.

  1. 1프레임 헤더transferId, chunkNo, length와 전체 크기
  2. 2상한이 있는 버퍼메모리 사용을 제한하는 high-water mark
  3. 3체크포인트수신자가 디스크에 확정한 마지막 청크
  4. 4무결성 검사완성된 파일의 SHA-256 같은 체크섬
이 데모는 네트워크 동작을 단계별로 보여주는 개념 시뮬레이션입니다.

브라우저 데모는 개념 시뮬레이션입니다. 실제 서버 소켓에서는 런타임의 write 반환값과 drain·await drain을 사용하세요.

실험을 마쳤다면