在用 Express 实现 SSE 之后,我想对 Koa 做同样的事情,如下所示:
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
router.get('/stream', (ctx, next) => {
ctx.set({
'Access-Control-Allow-Origin': '*',
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
Connection: 'Keep-Alive',
});
const id = new Date().toLocaleTimeString();
ctx.res.write(`id: ${id}'\n`);
ctx.res.write(`data: CONNECTION ESTABLISHED)}\n\n`);
next();
});
app.use(router.routes());
app.listen(8080, () => {
console.log('Listening on port 8080');
});
对于我的客户,在 React 组件的构造函数中:
constructor(props) {
super(props);
this.state = {
source: new EventSource("http://localhost:8080/stream"),
};
}
但由于某种原因,我在客户端收到以下错误消息:
Firefox 无法在http://localhost:8080/stream建立与服务器的连接。
即使我的客户的请求/stream
确实通过了(但没有回复)。
什么可能导致 SSE 连接出现此问题?
我有一个 Koa 服务器在给定端口上侦听,这是一条使用正确的标头数据捕获初始 GET 请求的路由,但它失败了。