Завершение потока в Nest
Бесконечная серия тиков удерживает соединение и процессор, хотя демонстрации хватает нескольких значений. Клиент должен увидеть корректное окончание, а не обрыв при закрытии вкладки.
Оператор take в цепочке RxJS
ограничивает число элементов.
Когда счётчик исчерпан, наблюдаемая
последовательность завершается
сама, Nest закрывает HTTP ответ
и освобождает ресурсы в NodeJS.
Покажем на примере постов:
import { Controller, MessageEvent, Sse } from '@nestjs/common';
import { interval, map, Observable, take } from 'rxjs';
@Controller('posts')
export class PostController {
@Sse('stream')
streamLimited(): Observable<MessageEvent> {
return interval(300).pipe(
take(3),
map((tick) => ({
data: { tick },
})),
);
}
}
Ограничьте поток в WorkerController
несколькими событиями с коротким
интервалом, чтобы после последнего
тика соединение завершилось штатно.