Enhance SSE support: adjust headers and message format for better compatibility
Despliegue Automático / desplegar (push) Successful in 40s
Despliegue Automático / desplegar (push) Successful in 40s
This commit is contained in:
@@ -48,6 +48,7 @@ const streamEvents = async (req, res) => {
|
||||
res.setHeader('Content-Type', 'text/event-stream');
|
||||
res.setHeader('Cache-Control', 'no-cache');
|
||||
res.setHeader('Connection', 'keep-alive');
|
||||
res.setHeader('X-Accel-Buffering', 'no');
|
||||
res.flushHeaders(); // Enviar cabeceras inmediatamente
|
||||
|
||||
console.log(`Cliente SSE conectado para userId: ${userId}`);
|
||||
@@ -56,7 +57,11 @@ const streamEvents = async (req, res) => {
|
||||
sseManager.addClient(userId, res);
|
||||
|
||||
// Latido (Heartbeat) para mantener la conexión viva a través de firewalls
|
||||
const interval = setInterval(() => res.write(':keepalive\n\n'), 30000);
|
||||
const interval = setInterval(() => {
|
||||
res.write('event: ping\n');
|
||||
res.write('data: keepalive\n\n');
|
||||
if (typeof res.flush === 'function') res.flush();
|
||||
}, 30000);
|
||||
|
||||
// Cuando el cliente (móvil/PC) cierre la app, limpiar la memoria
|
||||
req.on('close', () => {
|
||||
|
||||
@@ -24,13 +24,19 @@ class SseManager {
|
||||
}
|
||||
}
|
||||
|
||||
// El "timbre": Avisar a todos los dispositivos de un usuario (excepto al que originó el cambio)
|
||||
notifyUser(userId) {
|
||||
if (this.clients.has(userId)) {
|
||||
const userClients = this.clients.get(userId);
|
||||
userClients.forEach(res => {
|
||||
// Formato obligatorio de SSE: "data: {JSON}\n\n"
|
||||
res.write(`data: ${JSON.stringify({ event: 'sync_needed' })}\n\n`);
|
||||
|
||||
// 1. Formato estricto que espera el paquete flutter_client_sse
|
||||
res.write('event: message\n');
|
||||
res.write('data: sync_needed\n\n');
|
||||
|
||||
// 2. Si hay algún middleware de compresión atrapando el mensaje, lo forzamos a salir
|
||||
if (typeof res.flush === 'function') {
|
||||
res.flush();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user