WebSockets
Starlette에는 WebSocket HTTP 요청과 같은 기능을 하지만 웹 소켓에서 데이터를 보내고 받을 수 있는 클래스입니다.
웹 소켓
서명: WebSocket(scope, receive=None, send=None)
스타렛에서.웹 소켓 가져오기 웹 소켓
비동기 def 앱(범위, 수신, 전송):
웹 소켓 = 웹 소켓 (범위 = 범위, 수신 = 수신, 송신 = 송신)
웹소켓을 기다리세요. 수락하세요 ()
웹 소켓을 기다립니다. send_gate ('안녕하세요, 세상!')
웹소켓을 기다리세요. 닫으세요 ()
웹 소켓은 매핑 인터페이스를 제공하므로 scope 와 마찬가지로 사용할 수 있습니다.
예를 들어 websocket['path'] 는 ASGI 경로를 반환합니다.
균일한 리소스 로케이터(일반적으로 URL이라고도 함)
WebSocket URL은 websocket.url 로 액세스됩니다.
이 속성은 실제로 str 의 하위 클래스이며 URL에서 구문 분석할 수 있는 모든 구성 요소를 표시합니다.
예를 들어 websocket.url.path,websocket.url.port,websocket.url.scheme.
제목
헤더는 불변의 대소문자를 구분하지 않는 다중 사전으로 노출됩니다.
예를 들어: websocket.headers['sec-websocket-version']
쿼리 매개 변수
쿼리 매개 변수는 불변의 여러 사전으로 노출됩니다.
예를 들어: websocket.query_params['search']
경로 매개 변수
라우터 경로 매개 변수는 사전 인터페이스로 노출됩니다.
예를 들어: websocket.path_params['username']
연결 수락
await websocket.accept(subprotocol=None, headers=None)
데이터 보내기
await websocket.send_text(data)await websocket.send_bytes(data)await websocket.send_json(data)
버전 0.10.0에서 JSON 메시지는 기본적으로 텍스트 데이터 프레임으로 전송됩니다.websocket.send_json(data, mode="binary") 를 사용하여 JSON을 이진 데이터 프레임으로 보냅니다.
데이터 받기
await websocket.receive_text()await websocket.receive_bytes()await websocket.receive_json()
"starlette.websockets.WebSocketDisconnect() 를 올릴 수 있습니다"라는 텍스트는 기존의 의미 표현에 맞지 않는 것 같아서 정확한 중국어 번역을 하기가 어렵습니다. 더 많은 상황 정보를 가지고 있거나 텍스트 내용의 정확성을 확인한다면 더 만족스러운 번역을 제공하기 위해 최선을 다하겠습니다.
현재 문자 그대로의 번역은 "starlette.websockets.WebSocketDisconnect() 를 개선할 수 있습니다. " 그러나 이 번역은 실용적이지 않을 수 있습니다.
버전 0.10.0에서 JSON 메시지는 기본적으로 텍스트 데이터 프레임으로 수신됩니다.websocket.receive_json(data, mode="binary") 를 사용하여 JSON을 이진 데이터 프레임으로 수신합니다.
반복 데이터
websocket.iter_text()websocket.iter_bytes()websocket.iter_json()
receive_text,receive_bytes 및 receive_json 와 유사하지만 비동기 반복기를 반환합니다.
스타렛에서.웹 소켓 가져오기 웹 소켓
비동기 def 앱(범위, 수신, 전송):
웹 소켓 = 웹 소켓 (범위 = 범위, 수신 = 수신, 송신 = 송신)
웹소켓을 기다리세요. 수락하세요 ()
웹 소켓의 메시지에 대한 비동기화. iter_텍스트():
웹소켓 send_gate를 기다립니다(f "메시지 텍스트는:{message}")
웹소켓을 기다리세요. 닫으세요 ()
starlette.websockets.WebSocketDisconnect 가 승격되면 반복기가 종료됩니다.
가까운 연결
await websocket.close(code=1000, reason=None)
메시지 보내기 및 받기
원시 ASGI 메시지를 보내거나 받아야 하는 경우 원시 send 및 receive 콜러블 대신 websocket.send() 및 websocket.receive() 를 사용해야 합니다. 이렇게 하면 WebSocket의 상태가 올바르게 업데이트됩니다.
await websocket.send(message)await websocket.receive()
거부 응답 보내기
websocket.accept() 를 호출하기 전에 websocket.close() 에 전화하면 서버가 자동으로 HTTP 403 오류를 클라이언트 측으로 보냅니다.
다른 오류 응답을 보내려면 websocket.send_denial_response() 방법을 사용할 수 있습니다. 응답을 보낸 다음 연결을 닫습니다.
await websocket.send_denial_response(response)
이를 위해서는 ASGI 서버가 WebSocket 거부 응답 확장을 지원해야 합니다. 그렇지 않으면 RuntimeError 오류가 발생합니다.