# WebSockets { #websockets } Puedes usar WebSockets con **FastAPI**. ## Instalar `websockets` { #install-websockets } Asegúrate de crear un [entorno virtual](../virtual-environments.md){.internal-link target=_blank}, activarlo e instalar `websockets` (un paquete de Python que facilita usar el protocolo "WebSocket"):
Puedes escribir mensajes en el cuadro de entrada y enviarlos:
Y tu aplicación **FastAPI** con WebSockets responderá de vuelta:
Puedes enviar (y recibir) muchos mensajes:
Y todos usarán la misma conexión WebSocket.
## Usando `Depends` y otros { #using-depends-and-others }
En endpoints de WebSocket puedes importar desde `fastapi` y usar:
* `Depends`
* `Security`
* `Cookie`
* `Header`
* `Path`
* `Query`
Funcionan de la misma manera que para otros endpoints de FastAPI/*path operations*:
{* ../../docs_src/websockets/tutorial002_an_py310.py hl[68:69,82] *}
/// info | Información
Como esto es un WebSocket no tiene mucho sentido lanzar un `HTTPException`, en su lugar lanzamos un `WebSocketException`.
Puedes usar un código de cierre de los códigos válidos definidos en la especificación.
///
### Prueba los WebSockets con dependencias { #try-the-websockets-with-dependencies }
Si tu archivo se llama `main.py`, ejecuta tu aplicación con:
## Manejar desconexiones y múltiples clientes { #handling-disconnections-and-multiple-clients }
Cuando una conexión de WebSocket se cierra, el `await websocket.receive_text()` lanzará una excepción `WebSocketDisconnect`, que puedes capturar y manejar como en este ejemplo.
{* ../../docs_src/websockets/tutorial003_py39.py hl[79:81] *}
Para probarlo:
* Abre la aplicación con varias pestañas del navegador.
* Escribe mensajes desde ellas.
* Luego cierra una de las pestañas.
Eso lanzará la excepción `WebSocketDisconnect`, y todos los otros clientes recibirán un mensaje como:
```
Client #1596980209979 left the chat
```
/// tip | Consejo
La aplicación anterior es un ejemplo mínimo y simple para demostrar cómo manejar y transmitir mensajes a varias conexiones WebSocket.
Pero ten en cuenta que, como todo se maneja en memoria, en una sola lista, solo funcionará mientras el proceso esté en ejecución, y solo funcionará con un solo proceso.
Si necesitas algo fácil de integrar con FastAPI pero que sea más robusto, soportado por Redis, PostgreSQL u otros, revisa encode/broadcaster.
///
## Más información { #more-info }
Para aprender más sobre las opciones, revisa la documentación de Starlette para:
* La clase `WebSocket`.
* Manejo de WebSocket basado en clases.