WebSockets
Starlette bevat een WebSocket-klasse die functioneert als een HTTP-verzoek, maar waarmee gegevens kunnen worden verzonden en ontvangen op een WebSocket.
WebSocket kopen
Handtekening: WebSocket(scope, receive=None, send=None)
Vanaf starlette.websockets importeren WebSockets
Async def app (bereik, ontvangen, verzenden):
WebSocket = WebSocket (scope = scope, ontvangen = ontvangen, verzenden = verzenden)
Wacht op websocket.accepteer ()
Wacht op websocket. send _ text ('Hallo, wereld!')
Wacht op websocket.close ()
WebSockets bieden een kaartinterface, zodat u ze kunt gebruiken zoals u zou doen met scope.
websocket['path'] retourneert bijvoorbeeld het ASGI-pad.
Uniform Resource Locators (ook wel URL 's genoemd)
WebSocket-URL 's worden geopend als websocket.url.
Dit kenmerk is eigenlijk een subklasse van str en toont ook alle componenten die vanuit de URL kunnen worden geparseerd.
Bijvoorbeeld:websocket.url.path,websocket.url.port,websocket.url.scheme.
titel
Kopteksten worden weergegeven als onveranderlijke, hoofdletterongevoelige multi-woordenboeken.
Bijvoorbeeld: websocket.headers['sec-websocket-version']
query parameters
De queryparameters worden weergegeven als onveranderlijke meerdere woordenboeken.
Bijvoorbeeld: websocket.query_params['search']
pad parameter
De routerpadparameters worden weergegeven als een woordenboekinterface.
Bijvoorbeeld: websocket.path_params['username']
Aansluiting accepteren
await websocket.accept(subprotocol=None, headers=None)
gegevens sturen
await websocket.send_text(data)await websocket.send_bytes(data)await websocket.send_json(data)
Vanaf versie 0.10.0 worden JSON-berichten standaard verzonden als tekstgegevensframes. Gebruik websocket.send_json(data, mode="binary") om JSON te verzenden als binaire gegevensframes.
gegevens ontvangen
await websocket.receive_text()await websocket.receive_bytes()await websocket.receive_json()
De tekst "Kan starlette.websockets.WebSocketDisconnect() verhogen". lijkt niet in overeenstemming te zijn met de conventionele semantische uitdrukking, waardoor het moeilijk is om een nauwkeurige Chinese vertaling te maken. Als u meer contextuele informatie heeft of de nauwkeurigheid van de tekstinhoud bevestigt, zal ik mijn best doen om u een meer bevredigende vertaling te geven.
De huidige letterlijke vertaling kan alleen worden vertaald als: "Kan starlette.websockets.WebSocketDisconnect() verbeteren". Maar deze vertaling is misschien niet praktisch.
Vanaf versie 0.10.0 worden JSON-berichten standaard ontvangen als tekstgegevensframes. Gebruik websocket.receive_json(data, mode="binary") om JSON als binaire gegevensframes te ontvangen.
iteratieve gegevens
websocket.iter_text()websocket.iter_bytes()websocket.iter_json()
Vergelijkbaar met receive_text,receive_bytes en receive_json, maar retourneert een asynchrone iterator.
Vanaf starlette.websockets importeren WebSockets
Async def app (bereik, ontvangen, verzenden):
WebSocket = WebSocket (scope = scope, ontvangen = ontvangen, verzenden = verzenden)
Wacht op websocket.accepteer ()
Async voor bericht in websocket. iter _ text ():
Wacht op websocket send _ text (f "Berichttekst was:{message}")
Wacht op websocket.close ()
Wanneer starlette.websockets.WebSocketDisconnect wordt gepromoot, wordt de iterator afgesloten.
Verbinding sluiten
await websocket.close(code=1000, reason=None)
Berichten versturen en ontvangen
Als u onbewerkte ASGI-berichten wilt verzenden of ontvangen, moet u websocket.send() en websocket.receive() gebruiken in plaats van de onbewerkte send- en receive-callables. Dit zorgt ervoor dat de status van de WebSocket correct wordt bijgewerkt.
await websocket.send(message)await websocket.receive()
Stuur afwijzings reactie
Als u websocket.close() aanroept voordat u websocket.accept() aanroept, stuurt de server automatisch een HTTP 403-fout naar de clientzijde.
Als u een andere foutreactie wilt verzenden, kunt u de websocket.send_denial_response()-methode gebruiken. Deze stuurt een reactie en sluit vervolgens de verbinding.
await websocket.send_denial_response(response)
Dit vereist dat de ASGI-server WebSocket Denial Response-extensies ondersteunt. Zo niet, dan wordt er een RuntimeError-fout gegenereerd.