# WebSocket **FastAPI**でWebSocketが使用できます。 ## `WebSockets`のインストール まず `WebSockets`のインストールが必要です。
入力ボックスにメッセージを入力して送信できます。
そして、 WebSocketを使用した**FastAPI**アプリケーションが応答します。
複数のメッセージを送信(および受信)できます。
そして、これらの通信はすべて同じWebSocket接続を使用します。
## 依存関係
WebSocketエンドポイントでは、`fastapi` から以下をインポートして使用できます。
* `Depends`
* `Security`
* `Cookie`
* `Header`
* `Path`
* `Query`
これらは、他のFastAPI エンドポイント/*path operation* の場合と同じように機能します。
```Python hl_lines="58-65 68-83"
{!../../../docs_src/websockets/tutorial002.py!}
```
!!! info "情報"
WebSocket で `HTTPException` を発生させることはあまり意味がありません。したがって、WebSocketの接続を直接閉じる方がよいでしょう。
クロージングコードは、仕様で定義された有効なコードの中から使用することができます。
将来的には、どこからでも `raise` できる `WebSocketException` が用意され、専用の例外ハンドラを追加できるようになる予定です。これは、Starlette の PR #527 に依存するものです。
### 依存関係を用いてWebSocketsを試してみる
ファイル名が `main.py` である場合、以下の方法でアプリケーションを実行します。
## 切断や複数クライアントへの対応
WebSocket接続が閉じられると、 `await websocket.receive_text()` は例外 `WebSocketDisconnect` を発生させ、この例のようにキャッチして処理することができます。
```Python hl_lines="81-83"
{!../../../docs_src/websockets/tutorial003.py!}
```
試してみるには、
* いくつかのブラウザタブでアプリを開きます。
* それらのタブでメッセージを記入してください。
* そして、タブのうち1つを閉じてください。
これにより例外 `WebSocketDisconnect` が発生し、他のすべてのクライアントは次のようなメッセージを受信します。
```
Client #1596980209979 left the chat
```
!!! tip "豆知識"
上記のアプリは、複数の WebSocket 接続に対してメッセージを処理し、ブロードキャストする方法を示すための最小限のシンプルな例です。
しかし、すべての接続がメモリ内の単一のリストで処理されるため、プロセスの実行中にのみ機能し、単一のプロセスでのみ機能することに注意してください。
もしFastAPIと簡単に統合できて、RedisやPostgreSQLなどでサポートされている、より堅牢なものが必要なら、encode/broadcaster を確認してください。
## その他のドキュメント
オプションの詳細については、Starletteのドキュメントを確認してください。
* `WebSocket` クラス
* クラスベースのWebSocket処理