Você pode usar <ahref="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"class="external-link"target="_blank">WebSockets</a> com **FastAPI**.
Você pode usar <ahref="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"class="external-link"target="_blank">WebSockets</a> com **FastAPI**.
## Instalando `WebSockets`
## Instale `websockets` { #install-websockets }
Garanta que você criou um [ambiente virtual](../virtual-environments.md){.internal-link target=_blank}, o ativou e instalou o `websockets`:
Garanta que você criou um [ambiente virtual](../virtual-environments.md){.internal-link target=_blank}, o ativou e instalou o `websockets` (uma biblioteca Python que facilita o uso do protocolo "WebSocket"):
<divclass="termy">
<divclass="termy">
@ -16,9 +16,9 @@ $ pip install websockets
</div>
</div>
## Cliente WebSockets
## Cliente WebSockets { #websockets-client }
### Em produção
### Em produção { #in-production }
Em seu sistema de produção, você provavelmente tem um frontend criado com um framework moderno como React, Vue.js ou Angular.
Em seu sistema de produção, você provavelmente tem um frontend criado com um framework moderno como React, Vue.js ou Angular.
@ -40,11 +40,11 @@ Mas é a maneira mais simples de focar no lado do servidor de WebSockets e ter u
@ -119,7 +119,7 @@ Você pode usar um código de fechamento dos <a href="https://tools.ietf.org/htm
///
///
### Tente os WebSockets com dependências
### Tente os WebSockets com dependências { #try-the-websockets-with-dependencies }
Se seu arquivo for nomeado `main.py`, execute sua aplicação com:
Se seu arquivo for nomeado `main.py`, execute sua aplicação com:
@ -133,11 +133,11 @@ $ fastapi dev main.py
</div>
</div>
Abrar seu browser em: <ahref="http://127.0.0.1:8000"class="external-link"target="_blank">http://127.0.0.1:8000</a>.
Abra seu navegador em: <ahref="http://127.0.0.1:8000"class="external-link"target="_blank">http://127.0.0.1:8000</a>.
Lá você pode definir:
Lá você pode definir:
* O "Item ID", usado na rota.
* O "Item ID", usado no path.
* O "Token" usado como um parâmetro de consulta.
* O "Token" usado como um parâmetro de consulta.
/// tip | Dica
/// tip | Dica
@ -150,15 +150,15 @@ Com isso você pode conectar o WebSocket e então enviar e receber mensagens:
<imgsrc="/img/tutorial/websockets/image05.png">
<imgsrc="/img/tutorial/websockets/image05.png">
## Lidando com desconexões e múltiplos clientes
## Lidando com desconexões e múltiplos clientes { #handling-disconnections-and-multiple-clients }
Quando uma conexão WebSocket é fechada, o `await websocket.receive_text()` levantará uma exceção `WebSocketDisconnect`, que você pode então capturar e lidar como neste exemplo.
Quando uma conexão WebSocket é fechada, o `await websocket.receive_text()` levantará uma exceção `WebSocketDisconnect`, que você pode então capturar e lidar como neste exemplo.
* Abrar o aplicativo com várias abas do navegador.
* Abra o aplicativo com várias abas do navegador.
* Escreva mensagens a partir delas.
* Escreva mensagens a partir delas.
* Então feche uma das abas.
* Então feche uma das abas.
@ -172,13 +172,13 @@ Client #1596980209979 left the chat
O app acima é um exemplo mínimo e simples para demonstrar como lidar e transmitir mensagens para várias conexões WebSocket.
O app acima é um exemplo mínimo e simples para demonstrar como lidar e transmitir mensagens para várias conexões WebSocket.
Mas tenha em mente que, como tudo é manipulado na memória, em uma única lista, ele só funcionará enquanto o processo estiver em execução e só funcionará com um único processo.
Mas tenha em mente que, como tudo é manipulado na memória, em uma única list, ele só funcionará enquanto o processo estiver em execução e só funcionará com um único processo.
Se você precisa de algo fácil de integrar com o FastAPI, mas que seja mais robusto, suportado por Redis, PostgreSQL ou outros, verifique o <ahref="https://github.com/encode/broadcaster"class="external-link"target="_blank">encode/broadcaster</a>.
Se você precisa de algo fácil de integrar com o FastAPI, mas que seja mais robusto, suportado por Redis, PostgreSQL ou outros, verifique o <ahref="https://github.com/encode/broadcaster"class="external-link"target="_blank">encode/broadcaster</a>.
///
///
## Mais informações
## Mais informações { #more-info }
Para aprender mais sobre as opções, verifique a documentação do Starlette para:
Para aprender mais sobre as opções, verifique a documentação do Starlette para: