# WebSockets { #websockets } 您可以在 **FastAPI** 中使用 WebSockets。 ## 安装 `websockets` { #install-websockets } 请确保您创建一个[虚拟环境](../virtual-environments.md){.internal-link target=_blank}、激活它,并安装 `websockets`(一个让使用“WebSocket”协议更容易的 Python 库):
您可以在输入框中输入消息并发送:
您的 **FastAPI** 应用程序将回复:
您可以发送(和接收)多条消息:
所有这些消息都将使用同一个 WebSocket 连接。
## 使用 `Depends` 和其他依赖项 { #using-depends-and-others }
在 WebSocket 端点中,您可以从 `fastapi` 导入并使用以下内容:
* `Depends`
* `Security`
* `Cookie`
* `Header`
* `Path`
* `Query`
它们的工作方式与其他 FastAPI 端点/*路径操作* 相同:
{* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
/// info
由于这是一个 WebSocket,抛出 `HTTPException` 并不是很合理,而是抛出 `WebSocketException`。
您可以使用规范中定义的有效代码。
///
### 尝试带有依赖项的 WebSockets { #try-the-websockets-with-dependencies }
如果您的文件名为 `main.py`,请使用以下命令运行应用程序:
## 处理断开连接和多个客户端 { #handling-disconnections-and-multiple-clients }
当 WebSocket 连接关闭时,`await websocket.receive_text()` 将引发 `WebSocketDisconnect` 异常,您可以捕获并处理该异常,就像本示例中的示例一样。
{* ../../docs_src/websockets_/tutorial003_py310.py hl[79:81] *}
尝试以下操作:
* 使用多个浏览器选项卡打开应用程序。
* 从这些选项卡中发送消息。
* 然后关闭其中一个选项卡。
这将引发 `WebSocketDisconnect` 异常,并且所有其他客户端都会收到类似以下的消息:
```
Client #1596980209979 left the chat
```
/// tip
上面的应用程序是一个最小和简单的示例,用于演示如何处理和向多个 WebSocket 连接广播消息。
但请记住,由于所有内容都在内存中以单个列表的形式处理,因此它只能在进程运行时工作,并且只能使用单个进程。
如果您需要与 FastAPI 集成更简单但更强大的功能,支持 Redis、PostgreSQL 或其他功能,请查看 encode/broadcaster。
///
## 更多信息 { #more-info }
要了解更多选项,请查看 Starlette 的文档:
* `WebSocket` 类。
* 基于类的 WebSocket 处理。