Content-Type como text/event-stream. Isso diz ao cliente: "Atenção, este é um fluxo de eventos!"data:: Contém a informação real que queremos transmitir.event: (Opcional): Permite classificar o tipo de evento (ex: user_login).\n\n) para sinalizar ao cliente que um pacote de dados foi concluído.id: 1
event: update
data: {“valor”: 100}
retry: 5000
Vantagens:
Limitações:
Criação do venv
python -m venv sse
source sse/bin/activate
Instalação do pacote FastAPI
pip install fastapi
app.pyfrom fastapi import FastAPI
from fastapi.responses import StreamingResponse
from fastapi.middleware.cors import CORSMiddleware
import time
from datetime import datetime
import uvicorn
app = FastAPI()
app.add_middleware(CORSMiddleware, allow_origins=["*"]) # Obrigatório para teste local com HTML
def gerar_dados():
while True:
# Obtém a data e hora atual
agora = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
# Formato SSE (IMPORTANTE: duas quebras de linha no final)
yield f"data: {agora}\n\n"
# Envia a cada 1 segundo
time.sleep(1)
@app.get("/data")
def enviar_dados():
return StreamingResponse(gerar_dados(), media_type="text/event-stream")
client.html<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Exemplo SSE Simples</title>
</head>
<body>
<h1>Data Atual (SSE)</h1>
<p id="data">Carregando...</p>
<script>
// Cria conexão com o servidor SSE
const fonte = new EventSource("http://127.0.0.1:8000/data");
// Recebe os dados enviados pelo servidor
fonte.onmessage = function(event) {
document.getElementById("data").textContent = event.data;
};
// Tratamento de erro (opcional)
fonte.onerror = function() {
document.getElementById("data").textContent = "Erro na conexão.";
};
</script>
</body>
</html>
No terminal, dentro da pasta do projeto, execute:
fastapi run app.py
Se tudo estiver correto, o servidor vai iniciar (veja mensagem padrão no terminal) e você poderá receber as mensagens na página client.html
Problema: Em um sistema grande, mais de um serviço pode gerar eventos.

Veja mais exemplo completo em https://mpurayil.com/blog/event-driven-architecture-guide-python
Padrão: Uso das filas para conectar serviços independentes que trabalham juntos em um objetivo maior.
Exemplo Prático (Pedido Online):
PEDIDO_FEITO na fila.PAGAMENTO_CONFIRMADO.ESTOQUE_RESERVADO.Resumo:
Material Adicional:
Implementar um canal de comunicação persistente, simulando um servidor que recebe mensagens e as ecoa de volta para o cliente.
Siga o passo-a-passo em:
https://denmartins.github.io/labs/2026-04-28-sd-sse
Créditos da imagem: https://unsplash.com/@safarslife
Dúvidas e Discussão
Contexto: Uma empresa deseja desenvolver um sistema simples de acompanhamento de atividades em sua plataforma digital. Esse sistema deve exibir, em tempo real, eventos como:
Objetivo: Desenvolver uma aplicação utilizando SSE que permita:
EventSource no JavaScript e seu papel em aplicações SSE.Uma empresa deseja desenvolver um sistema de monitoramento em tempo real para acompanhar a temperatura de equipamentos industriais. O sistema deve exibir atualizações contínuas em um dashboard web, sem necessidade de interação do usuário.
Com base nesse cenário:
Resposta: Server push é uma técnica em que o servidor envia dados ao cliente sem que este precise solicitar continuamente. Diferentemente do modelo tradicional, onde o cliente inicia a comunicação, no server push o servidor pode enviar atualizações automaticamente.
Resposta: Polling envia requisições periódicas, gerando desperdício. Long polling mantém a requisição aberta até haver dados, sendo mais eficiente que polling. SSE mantém conexão contínua, permitindo envio direto do servidor, sendo mais eficiente e com menor overhead.
Resposta: EventSource cria uma conexão com o servidor SSE e escuta eventos enviados continuamente. Ele processa automaticamente os dados recebidos e permite que o desenvolvedor manipule esses eventos no cliente.
Resposta: a) SSE é mais adequado por ser eficiente para comunicação unidirecional contínua. b) O cliente estabelece conexão persistente e o servidor envia atualizações continuamente. c) Limitação: não suporta comunicação bidirecional → solução: usar WebSockets se necessário.