Я уже несколько часов пытаюсь реализовать поток SSE с Koa, но при попытке отправить сообщение моему клиенту после инициализации соединения получаю следующую ошибку:
Ошибка [ERR_STREAM_WRITE_AFTER_END]:запись после окончания
Вот как я настроил свой SSE:
На стороне клиента:
const source = new EventSource("http://localhost:8080/stream");
this.source.onmessage = (e) => {
console.log("---- RECEIVED MESSAGE: ", e.data);
};
// Catches errors
this.source.onerror = (e) => {
console.log("---- ERROR: ", e.data);
};
Сервер-side (Koa):
// Entry point to our SSE stream
router.get('/stream', ctx => {
// Set response status, type and headers
ctx.response.status = 200;
ctx.response.type = 'text/event-stream';
ctx.response.set({
'Cache-Control': 'no-cache',
Connection: 'keep-alive',
});
// Called when another route is reached
// Should send to the client the following
ctx.app.on('message', data => {
ctx.res.write(`event: Test\n`);
ctx.res.write(`data: This is test data\n\n`);
});
});
Ошибка возникает, когда мы вызываем ctx.res.write
после получения сообщения.
Почему мой поток завершился, хотя ничего явно не делает?Как я могу отправить сообщение через поток с Koa?