Ga naar inhoud

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.