일곱 줄로 만드는 서버
FastAPI 는 @app.websocket 데코레이터로 WebSocket 엔드포인트를 열어. 처리기는 WebSocket 인자 하나를 받는 코루틴이야. 세 단계가 순서대로 일어나야 해. await websocket.accept() 로 핸드셰이크를 끝내고, 반복문 안에서 await websocket.receive_*() 로 받은 뒤, await websocket.send_*() 로 응답해.
accept() 는 선택 사항이 아니야
accept() 를 호출하기 전에는 핸드셰이크가 끝나지 않아 모든 전송이 오류를 일으켜. 반대로 accept 를 호출하지 않는 것 도 인증 검사 중 연결을 거절하는 방법이야. accept 뒤에는 연결이 완전히 열리고 프레임이 흐르기 시작해.
실행하고 시험하기
uvicorn 으로 서버를 띄우고 명령줄에서는 websocat 이나 wscat 으로 시험할 수 있어. cwkPippa 는 일부러 --reload 없이 Uvicorn 을 실행해. 피파 어댑터가 살아 있는 브레인 스템이라 다시 불러오면 세션이 끊기기 때문이지. 학습용 서버에서는 --reload 를 써도 돼.