RES.WRITE, no enviando datos grandes hasta que se llame a Res.end () después de RES.WRITE, pero no quiere terminar la respuesta porque es conexión SSE -- de.js campo con express campo con server-sent-events camp Relacionados El problema

res.write not sending big data until res.end() is called after res.write but don't want to end response because it is SSE connection


1
vote

problema

Español

res.write No envíe datos grandes (enviando datos incompletos) hasta que se llame a Res.end (), pero no quiero usar Res.end porque es una API de SSE. Estoy usando un middleware de compresión (la versión del nodo es 8)

  @Transactional(propagation = Propagation.REQUIRED)     public void saveUser(User user) {         Long nextLong = RandomUtils.nextLong(0, 10000L);         // user.setId(nextLong.intValue());         User merge = em.merge(user);         System.out.println(" merged ");          em.persist(merge);           System.out.println("");     } 4  
Original en ingles

res.write not sending big data (Sending incomplete data) until res.end() is called but I don't want to use res.end because it is an SSE API. I m using a compression middleware (Node version is 8 )

let output = null, data = result.data, id = result.id, eventName = result.eventName;             if (typeof data === "object") {                 let result = rm.utils.stringify(data);                 result = result ? result.split(/[\r\n]+/).map(str => 'data: ' + str).join('\n') : '';                 output = (                     (id ? "id: " + id + "\n" : "") +                     (eventName ? "event: " + eventName + "\n" : "") +                     (result || "Not available") + '\n\n'                 );             }             res.result = output || data || "";             res.write(output || data || "");             res.flush();             break; 
        
   
   

Lista de respuestas

0
 
vote

algunas cosas. En primer lugar, creo que necesita escribir los encabezados primero por res.writeHead Antes de llamar res.write . En segundo lugar, no puede simplemente mantener la conexión durante mucho tiempo, por defecto, ya que el valor del tiempo de espera está configurado por el navegador. Si no envía ningún dato durante esa duración, la conexión disminuirá. Por lo que necesita usar res.writeProcessing

  let output = null, data = result.data, id = result.id, eventName = result.eventName;         if (typeof data === "object") {             let result = rm.utils.stringify(data);             result = result ? result.split(/[  ]+/).map(str => 'data: ' + str).join(' ') : '';             output = (                 (id ? "id: " + id + " " : "") +                 (eventName ? "event: " + eventName + " " : "") +                 (result || "Not available") + '  '             );         }         res.result = output || data || "";         res.writeHead(200, {'Content-Type': 'application/json'});         res.write(output || data || "");         break;   

Mira este Responder Para ver cómo puede mantener la conexión abierta con RES.WRITEPROCSING. Por último, si desea enviar eventos, use un WebSocket para presionar eventos del servidor.

 

A few things. First of all i think you need to write the headers first by res.writeHead before calling res.write . Secondly you can't just hold the connection for too long by default because the timeout value is set by the browser. If you don't send any data during that duration the connection will drop. So you need to use res.writeProcessing

let output = null, data = result.data, id = result.id, eventName = result.eventName;         if (typeof data === "object") {             let result = rm.utils.stringify(data);             result = result ? result.split(/[\r\n]+/).map(str => 'data: ' + str).join('\n') : '';             output = (                 (id ? "id: " + id + "\n" : "") +                 (eventName ? "event: " + eventName + "\n" : "") +                 (result || "Not available") + '\n\n'             );         }         res.result = output || data || "";         res.writeHead(200, {'Content-Type': 'application/json'});         res.write(output || data || "");         break; 

Look at this answer to see how you can hold the connection open with res.writeProcessing. Lastly if you want to send events use a websocket for pushing events from the server.

 
 
   
   

Relacionados problema

-1  ¿Cómo mostrar datos actualizados a los usuarios lo más rápido posible (no en tiempo real)?  ( How to show updated data to the users as fast as possible not real time ) 
En la base de datos, cierta entidad se está actualizando por algún proceso de backend. Queremos mostrar este valor actualizado al usuario, no en tiempo real, ...

4  ¿Los eventos enviados por servidor funcionan con CORS?  ( Do server sent events work with cors ) 
Según mdn : Nota: Aunque aún no es parte de la norma, EventCource admite CORS en Firefox 11 y posteriormente. Se espera que esto se vuelva estándar pronto...

18  SSE y Servlet 3.0  ( Sse and servlet 3 0 ) 
He registrado un SSE típico al cargar la página: Cliente: sseTest: function(){ var source = new EventSource('mySSE'); source.onopen = function(event){...

3  ¿Puede ColdFusion enviar eventos HTML5 Server-enviados en UTF-8?  ( Can coldfusion send html5 server sent events in utf 8 ) 
Uso de <cfcontent type="text/event-stream"> En ColdFusion, los caracteres no en inglés se muestran como signos de interrogación: ???????123123???? ??? , pe...

17  Abajo de uso de eventos enviados por el servidor para la comunicación bidireccional del cliente-servidor (en lugar de Web WebSockets)  ( Downside of using server sent events for bidirectional client server communicati ) 
Recientemente, he encontrado fuera de los eventos enviados por el servidor como una alternativa mucho más sencilla a WebSockets para hacer presionar desde el ...

3  Servidor web incorporado de PHP que se ejecuta muy lento  ( Php built in web server running very slow ) 
Soy un principiante en PHP y haciendo un sitio web que muestra información básica del sistema (uso de la CPU, uso de memoria, etc.) de un sistema Linux en una...

6  Ajax Fire-and-Old, busca lo contrario del evento enviado por el servidor  ( Ajax fire and forget looking for the opposite of server sent event ) 
¿Es estos un evento Simétrico para para generar eventos enviados por el servidor para generar eventos de incendios y olvidados del navegador al servidor? Sé...

12  Django 3.1: StreamingHTTPRESPONSE CON UN GENERADOR DE ASYNC  ( Django 3 1 streaminghttpresponse with an async generator ) 
Documentación para Django 3.1 dice esto sobre las vistas de ASYNC: Los principales beneficios son la capacidad de atender cientos de conexiones sin usar ...

5  Eventsurce no se volverá a conectar automáticamente en Android Firefox  ( Eventsource will not automatically reconnect on android firefox ) 
Estoy tratando de implementar una aplicación HTML5 que funcionará en el escritorio, Android y iOS. La función principal de la aplicación es enviar los comando...

1  Eventos enviados por el servidor de Jersey que no funcionan con Firefox  ( Jersey server sent events not working with firefox ) 
Jersey 2.1.4, Java 8, Tomcat 8, Firefox 38.0.1 servidor: @GET @Produces(SseFeature.SERVER_SENT_EVENTS) public EventOutput listenToBroadcast() { final...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos