Ktor sse отключение клиента

Ktor поддерживает серверные события в том смысле, что я могу использовать тип контента текст / серверное событие. Он работает довольно хорошо, но при отключении клиента, например. Вызов закрытия окна браузера / закрытия вручную, он по-прежнему будет продолжать отправлять события, так как он не обнаруживает разъединение до следующего события, при котором будет сгенерировано исключение. Есть ли способ получить событие для отключения клиента в запросе ktor, чтобы мы могли прекратить отправку событий на стороне сервера, а также ресурсов очистки?


person Enigmatrix Atheros    schedule 30.07.2019    source источник


Ответы (1)


Реализация Websocket Ktor имеет расширение pinger, которое делает то же самое для веб-сокетов. Так что я думаю, что то же самое и для SSE. Я подумал, что будет лучше отправить запрос функции здесь https://youtrack.jetbrains.com/issues/KTOR.

Поскольку мы используем SSE в Ktor в производстве, мы реализовали pinging клиентов в качестве фоновой сопрограммы. Он просто отправляет пустое событие каждые 30 секунд, и в случае сбоя соединение будет закрыто. Это предотвращает утечку соединений в случае, когда пользователь отключен, но сервер все еще поддерживает соединение.

person lehvolk    schedule 28.08.2020