Когда клиент закрывает сокет, вы должны закрыть объект ответа на стороне сервера, который обслуживал его.
По крайней мере, при непосредственном использовании пакета http
код выглядит примерно так:
request.connection.on("close", function(){
response.end();
//Any other clean up, e.g. clearInterval() for any timers.
console.log("Client closed connection. Aborting.");
});
Это было скопировано с п.25 моей книги, Data Pu sh Приложения с HTML5 SSE.
При { ссылка } есть пример для Express. js, который они записывают так:
response.on('close', () => {
console.log('client dropped me');
//Any other clean up
response.end();
});
Если предположить, request.connection
и response
- это один и тот же объект, то это один и тот же код, и, следовательно, не указан c до Express.
ОБНОВЛЕНИЕ на основе рассматриваемого кода
Ваши stream.on()
вызовы добавляют слушателя к событию. Поэтому они являются частью «очистки», которую вы должны выполнять, когда клиент отключается. Т.е.
response.on('close', () => {
console.log('client dropped me');
response.end();
stream.off('event-L', eventLHandler);
stream.off('event-U', eventUHandler);
})
См. https://nodejs.org/api/events.html#events_emitter_off_eventname_listener
Обратите внимание, как вам нужно указать функцию обработчика событий, поэтому нельзя использовать анонимные функции. Рефакторинг вашего кода, чтобы иметь два обработчика событий (которые принимают ответ как аргумент).