Sie können <ahref="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"class="external-link"target="_blank">WebSockets</a> mit **FastAPI** verwenden.
Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../virtual-environments.md){.internal-link target=_blank} erstellen, sie aktivieren und `websockets` installieren:
<divclass="termy">
@ -16,9 +16,9 @@ $ pip install websockets
</div>
## WebSockets-Client
## WebSockets-Client { #websockets-client }
### In Produktion
### In Produktion { #in-production }
In Ihrem Produktionssystem haben Sie wahrscheinlich ein Frontend, das mit einem modernen Framework wie React, Vue.js oder Angular erstellt wurde.
@ -36,11 +36,11 @@ Das ist natürlich nicht optimal und man würde das nicht in der Produktion mach
In der Produktion hätten Sie eine der oben genannten Optionen.
Aber es ist die einfachste Möglichkeit, sich auf die Serverseite von WebSockets zu konzentrieren und ein funktionierendes Beispiel zu haben:
Aber es ist der einfachste Weg, sich auf die Serverseite von WebSockets zu konzentrieren und ein funktionierendes Beispiel zu haben:
## Einen `websocket` erstellen { #create-a-websocket }
Erstellen Sie in Ihrer **FastAPI**-Anwendung einen `websocket`:
@ -48,13 +48,13 @@ Erstellen Sie in Ihrer **FastAPI**-Anwendung einen `websocket`:
/// note | Technische Details
Sie können auch `from starlette.websockets import WebSocket` verwenden.
Sie könnten auch `from starlette.websockets import WebSocket` verwenden.
**FastAPI** stellt den gleichen `WebSocket` direkt zur Verfügung, als Annehmlichkeit für Sie, den Entwickler. Er kommt aber direkt von Starlette.
///
## Nachrichten erwarten und Nachrichten senden
## Nachrichten erwarten und Nachrichten senden { #await-for-messages-and-send-messages }
In Ihrer WebSocket-Route können Sie Nachrichten `await`en und Nachrichten senden.
@ -62,14 +62,14 @@ In Ihrer WebSocket-Route können Sie Nachrichten `await`en und Nachrichten sende
Sie können Binär-, Text- und JSON-Daten empfangen und senden.
## Es ausprobieren
## Es ausprobieren { #try-it }
Wenn Ihre Datei `main.py` heißt, führen Sie Ihre Anwendung so aus:
<divclass="termy">
```console
$ uvicorn main:app --reload
$ fastapi dev main.py
<spanstyle="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@ -96,7 +96,7 @@ Sie können viele Nachrichten senden (und empfangen):
Und alle verwenden dieselbe WebSocket-Verbindung.
## Verwendung von `Depends` und anderen
## Verwendung von `Depends` und anderen { #using-depends-and-others }
In WebSocket-Endpunkten können Sie Folgendes aus `fastapi` importieren und verwenden:
@ -119,14 +119,14 @@ Sie können einen „Closing“-Code verwenden, aus den <a href="https://tools.i
///
### WebSockets mit Abhängigkeiten ausprobieren
### WebSockets mit Abhängigkeiten ausprobieren { #try-the-websockets-with-dependencies }
Wenn Ihre Datei `main.py` heißt, führen Sie Ihre Anwendung mit Folgendem aus:
<divclass="termy">
```console
$ uvicorn main:app --reload
$ fastapi dev main.py
<spanstyle="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@ -150,7 +150,7 @@ Damit können Sie den WebSocket verbinden und dann Nachrichten senden und empfan
<imgsrc="/img/tutorial/websockets/image05.png">
## Verbindungsabbrüche und mehreren Clients handhaben
## Verbindungsabbrüche und mehreren Clients handhaben { #handling-disconnections-and-multiple-clients }
Wenn eine WebSocket-Verbindung geschlossen wird, löst `await websocket.receive_text()` eine `WebSocketDisconnect`-Exception aus, die Sie dann wie in folgendem Beispiel abfangen und behandeln können.
@ -178,7 +178,7 @@ Wenn Sie etwas benötigen, das sich leicht in FastAPI integrieren lässt, aber r
///
## Mehr Informationen
## Mehr Informationen { #more-info }
Weitere Informationen zu Optionen finden Sie in der Dokumentation von Starlette: