Node.js 在调用res.end()之前,SSE事件不会到达客户端

Node.js 在调用res.end()之前,SSE事件不会到达客户端,node.js,gzip,server-sent-events,eventsource,Node.js,Gzip,Server Sent Events,Eventsource,同样的代码以前可以工作,但我不知道为什么现在不能工作。请帮助 我的问题是,当我使用SSE进行实时数据共享时,应该在res.write(data:${JSON.stringify(dataObject)}\n\n)上发送的数据对象在调用res.end()并立即发送所有数据为事件流之前不会被发送 response.writeHead(200, { Connection: "keep-alive", "Content-Type": "text/event-stream", "C

同样的代码以前可以工作,但我不知道为什么现在不能工作。请帮助

我的问题是,当我使用SSE进行实时数据共享时,应该在res.write(
data:${JSON.stringify(dataObject)}\n\n
)上发送的数据对象在调用res.end()并立即发送所有数据为事件流之前不会被发送

response.writeHead(200, {
    Connection: "keep-alive",
    "Content-Type": "text/event-stream",
    "Cache-Control": "no-cache",
    "Access-Control-Allow-Origin": '*',
    'Content-Encoding':'identity' // this with and without this
});

let syncher= setInterval(() => { 
    if(response.finished){ // If response ended the  interval is cleared
        clearInterval(syncher);
        return;
    }else{
        let dataToSend = getEventData(user,event);
        if(! dataToSend ){
            response.write('data:{close:true}');
            clearInterval(syncher);
            return;
        }
        response.write(`data:${JSON.stringify(dataToSend)}\n\n`);
        response.flushHeaders(); // Also tried with response.flush()
        if(dataToSend.close){
            delEventData(user,event);
            response.end();
        }
    }
}, 500);
上面的代码在服务器端,这也有关闭侦听器来关闭连接

const ev = new EventSource(conf.apiUrl+'/getStatus/'+ (userData.id || '') );
  let data = '';
  ev.onmessage = eventData=>{
    data = JSON.parse(eventData.data);
    if(!data){
      setState('progress '+data.completedSoFar)
      return;
    }
    if(!data.close){

    }else{
      if(data.success){
        console.log('Done Successfully')
      ev.close();
    }
  }
这是我的客户端代码

我不知道为什么事件监听器没有得到数据流,而我在互联网上搜索这个问题,我只发现当使用压缩中间件时,这个问题就发生了。我的应用程序中没有使用任何压缩中间件。我正在使用nodejsv11.4.0。我猜,当我发出eventsource请求时,chrome默认添加了gzip编码,node使用它将响应编码头设置为gzip,我试图删除并替换它,但没有成功,这导致了这个问题

如果我犯了任何错误,请为我的语法道歉


谢谢你的帮助。干杯

经过大量的调试和研究。问题出现在压缩我的响应的webpack dev服务器中。有关更多信息,请在经过大量调试和研究后参阅。问题出现在压缩我的响应的webpack dev服务器中。有关更多信息,请参阅

这是否回答了您的问题?不完全是。我没有使用任何其他模块来设置sse,但遵循了其他来源的步骤,仍然是响应头有gzip compress头,这扰乱了我的sse请求。这是否回答了您的问题?不完全是。我没有使用任何其他模块来设置sse,但遵循了其他来源的步骤,仍然是响应头有gzip压缩头,这会弄乱我的sse请求。