我正在尝试设置节点js服务器以通过SSE流式传输某些事件,除非我使用data
字段启动流,否则无法使其工作。
当我尝试添加其他字段时,例如id
或event
,它们不会在Chrome检查器中显示?
如果我尝试在数据之前放置这些字段,则不会发生连接打开以外的事件。
这是我正在玩的路线。
router.get('/stream', function * (){
let stream = new PassThrough();
let send = (message, id) => stream.write(`id: ${JSON.stringify(id)}\n data: ${JSON.stringify(message)}\n\n`);
let finish = () => dispatcher.removeListener('message', send);
this.socket.setTimeout(Number.MAX_VALUE);
this.type = 'text/event-stream;charset=utf-8';
this.set('Cache-Control', 'no-cache');
this.set('Connection', 'keep-alive');
this.body = stream;
stream.write(': open stream\n\n');
dispatcher.on('message', send);
this.req.on('close', finish);
this.req.on('finish', finish);
this.req.on('error', finish);
setInterval(function(){
dispatcher.emit('message', {date: Date.now()}, '12345')
}, 5000)
});
如果我正确地写信息流,我不太确定。
由于
答案 0 :(得分:0)
愚蠢的我,这确实是一个畸形的事件流。字段之间不应该有空格。它应该是:
id: ${JSON.stringify(id)}\ndata: ${JSON.stringify(message)}\n\n