Node.js 服务器发送事件 - 何时使用response.flushHeaders() 与response.writeHead()

Wid*_*dor 8 javascript node.js server-sent-events

我正在使用 Express 在 NodeJS 中编写应用程序的服务器端部分,它将使用服务器发送事件 (SSE)。我有一个似乎可行的解决方案,但需要了解在 Node.js 中是否有更好的方法。

代码的相关部分目前如下所示:

const headers = {
    'Content-Type': 'text/event-stream',
    'Connection': 'keep-alive',
    'Cache-Control': 'no-cache',
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Credentials': 'true'
};
res.writeHead(200, headers);

// Do more stuff [...]            
Run Code Online (Sandbox Code Playgroud)

其中res是响应对象。

我没有res.writeHead()看到其他例子使用res.flushHeaders()

res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Connection', 'keep-alive');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Credentials', 'true');
res.flushHeaders();
Run Code Online (Sandbox Code Playgroud)

就 SSE 和保持连接打开以发送消息而言,两者之间是否有区别?是否优于另一种?

Wal*_*roe 1

它们实际上是等效的,因为res.write()将标头与其第一个块一起刷新。对于 SSE,您很可能需要立即响应,至少表明连接成功。res.setHeader()如果您稍后需要访问或修改标头状态,这可能很有用,但这似乎与 SSE 无关。

请参阅nodejs.org 文档以了解response.write()response.setHeader()