LabHub

SSE — 서버가 먼저 말하는 법 · 와이어와 끊김 · 실습

첫 바이트가 언제 오는가

LabHub 에서 이어서 보기

목표

SSE 로 실제 겪는 문제 — 코드는 맞는데 화면에 한꺼번에 나온다 — 를
직접 만들고, 시간으로 확인합니다.

규칙

서버 띄우기

cd /root/work/sseuvicorn app:app --host 127.0.0.1 --port 8000 > /tmp/uv.log 2>&1 &curl -N -s localhost:8000/stream

-N 을 빼면 curl 이 자기 쪽에서 버퍼링해서, 서버가 잘 흘려보내도
한꺼번에 나온 것처럼 보입니다. **진단할 때 가장 먼저 의심할 것이
측정 도구 자신입니다.**

첫 바이트 재기

curl -N -s -o /dev/null -w '%{time_starttransfer}' localhost:8000/stream

단계

1. /stream — 0.3초 간격 3개
2. 와이어 포맷 → 02-wire.txt
3. id: · retry:
4. Last-Event-ID 이어받기 → 04-resume.txt
5. /idle — 주석 하트비트
6. /buffered 재현 → 06-timing.txt
7. /long + finallyclosed.log
8. 정리 → 08-notes.md

참고

빈 줄(`

`)로 이벤트를 끝내지 않으면 클라이언트는 아직 안 끝났다고
생각하고 계속 기다립니다. "아무것도 안 온다" 의 1번 원인입니다.

단계 8개

  1. 끝나지 않는 응답을 만든다
  2. 와이어 포맷을 맞춘다
  3. id 와 retry 를 준다
  4. 놓친 것부터 이어 준다
  5. 유휴 연결을 살려 둔다
  6. 버퍼링을 재현한다
  7. 끊긴 걸 알아챈다
  8. 언제 SSE 이고 언제 WebSocket 인가