小编Sri*_*ddy的帖子

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

相同的代码以前可以工作,但我不知道为什么现在不起作用。请帮忙。

我的问题是,当我使用 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);
Run Code Online (Sandbox Code Playgroud)

上面的代码位于服务器端,这也有关闭侦听器来关闭连接

const ev = new EventSource(conf.apiUrl+'/getStatus/'+ (userData.id || '') ); …
Run Code Online (Sandbox Code Playgroud)

gzip node.js server-sent-events eventsource

7
推荐指数
2
解决办法
2124
查看次数

标签 统计

eventsource ×1

gzip ×1

node.js ×1

server-sent-events ×1