# WebSockets { #websockets } **FastAPI**で[WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)が使用できます。 ## `websockets`のインストール { #install-websockets } [仮想環境](../virtual-environments.md)を作成し、それを有効化してから、「WebSocket」プロトコルを簡単に使えるようにするPythonライブラリの`websockets`をインストールしてください。
入力ボックスにメッセージを入力して送信できます。
そして、 WebSocketsを使用した**FastAPI**アプリケーションが応答します。
複数のメッセージを送信(および受信)できます。
そして、これらの通信はすべて同じWebSocket接続を使用します。
## `Depends` などの使用 { #using-depends-and-others }
WebSocketエンドポイントでは、`fastapi` から以下をインポートして使用できます。
* `Depends`
* `Security`
* `Cookie`
* `Header`
* `Path`
* `Query`
これらは、他のFastAPI エンドポイント/*path operations* の場合と同じように機能します。
{* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
/// note | 備考
これはWebSocketであるため、`HTTPException` を発生させることはあまり意味がありません。代わりに `WebSocketException` を発生させます。
クロージングコードは、[仕様で定義された有効なコード](https://tools.ietf.org/html/rfc6455#section-7.4.1)の中から使用することができます。
///
### 依存関係を用いてWebSocketsを試してみる { #try-the-websockets-with-dependencies }
アプリケーションを実行します。
## 切断や複数クライアントの処理 { #handling-disconnections-and-multiple-clients }
WebSocket接続が閉じられると、 `await websocket.receive_text()` は例外 `WebSocketDisconnect` を発生させ、この例のようにキャッチして処理することができます。
{* ../../docs_src/websockets_/tutorial003_py310.py hl[79:81] *}
試してみるには、
* いくつかのブラウザタブでアプリを開きます。
* それらのタブでメッセージを記入してください。
* そして、タブのうち1つを閉じてください。
これにより例外 `WebSocketDisconnect` が発生し、他のすべてのクライアントは次のようなメッセージを受信します。
```
Client #1596980209979 left the chat
```
/// tip | 豆知識
上記のアプリは、複数の WebSocket 接続に対してメッセージを処理し、ブロードキャストする方法を示すための最小限のシンプルな例です。
しかし、すべてがメモリ内の単一のリストで処理されるため、プロセスの実行中にのみ機能し、単一のプロセスでのみ機能することに注意してください。
FastAPIと簡単に統合できて、RedisやPostgreSQLなどでサポートされている、より堅牢なものが必要なら、[encode/broadcaster](https://github.com/encode/broadcaster) を確認してください。
///
## 詳細情報 { #more-info }
オプションの詳細については、Starletteのドキュメントを確認してください。
* [`WebSocket` クラス](https://www.starlette.dev/websockets/)。
* [クラスベースのWebSocket処理](https://www.starlette.dev/endpoints/#websocketendpoint)。