没有res.end()的情况下发送服务器已发送事件

时间:2020-05-17 04:07:32

标签: javascript node.js firebase google-app-engine google-cloud-platform

我正在使用客户端的Firebase和服务器的Google Cloud Platform编写Web应用程序。我想使用服务器端事件(SSE)从服务器向客户端发送更新。

在客户中

eventReceived = (eventData) => {
    console.log(eventData)
}
|
   if (!'EventSource' in window) {
        throw 'No SSE support'
    }

    var source = new EventSource(serverURL + '/events', { withCredentials: true })
    source.onmessage = (event) => eventReceived(event.data)

在服务器中

   res.set({
      'Cache-Control': 'no-cache',
      'Content-Type': 'text/event-stream',
      'Connection': 'keep-alive'
   });
   res.flushHeaders();

   res.write('retry: 10000\n\n')

   let count = 0;

    while (true) {
      await new Promise(resolve => setTimeout(resolve, 2000));

      res.write(`data: ${count}\n\n`)
      ////res.end()
    }
}

除非我取消对 ///// res.end()的注释,否则客户端不会有任何响应,但这会关闭连接。

我尝试了各种标头选项,例如不压缩但无济于事。

任何帮助将不胜感激。 谢谢!

0 个答案:

没有答案
相关问题