服务器发送的事件是否包含未发送数据的字段?

时间:2016-10-19 09:58:47

标签: javascript node.js server-sent-events

我正在尝试设置节点js服务器以通过SSE流式传输某些事件,除非我使用data字段启动流,否则无法使其工作。

当我尝试添加其他字段时,例如idevent,它们不会在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)
});

如果我正确地写信息流,我不太确定。

由于

1 个答案:

答案 0 :(得分:0)

愚蠢的我,这确实是一个畸形的事件流。字段之间不应该有空格。它应该是:

id: ${JSON.stringify(id)}\ndata: ${JSON.stringify(message)}\n\n