Когда поток закрывается, вам нужно удалить прослушиватель событий, чтобы не пытаться снова записывать в поток. Это можно сделать так:
router.get('/updates', (req, res) => {
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
function listener(event) {
console.log('Event triggered! Sending response.');
res.write('data: Event triggered!\n\n');
}
// Listens for 'event' and sends an 'Event triggered!' message to client when its heard.
eventEmitter.addListener('event', listener);
req.on('close', () => {
// remove listener so it won't try to write to this stream any more
eventEmitter.removeListener('event', listener);
console.log('Connection to client closed.');
res.end();
});
});
module.exports = router;
К вашему сведению, я не думаю, что вам нужно res.end()
, когда вы уже получили событие close
. Вы бы использовали res.send()
, если бы вы в одностороннем порядке пытались закрыть соединение с сервера, но если оно уже закрывается, я не думаю, что вам это нужно, и ни один из примеров кода, которые я видел, не использовал его таким образом.
Интересно, возможно ли, что ваш res.end()
также является причиной того, что вы получаете два close
события. Попробуйте удалить его.