Бесконечное исполнение EventSource.onmessage
Добрый день !
Я хочу организовать потоковый вывод - делаю это так 1) на основной странице у меня скрипт вида <script> var content = document.getElementById('content'); var source = new EventSource('/stream?message=${message}'); source.onmessage = function(event) { content.innerHTML += event.data + '<br>'; }; </script> Сам генератор, как Python-программа выглядит так -- def stream(self, message): # Настраиваем заголовки для потокового вывода cherrypy.response.headers['Content-Type'] = 'text/event-stream' cherrypy.response.headers['Cache-Control'] = 'no-cache' # Генератор для потокового вывода данных def generate(): for i in range(5): yield f"data: Processing {message} - step {i+1}\n\n" time.sleep(1) yield f"data: Finished processing {message}\n\n" return generate() Проблема состоит в том, что после первого вызова stream, он, как положено, выводит 5 сообщений + финальное сообщение, однако, после этого, снова срабатывает функция generate, хотя нового входа в stream не было, вновь печатается 6 сообщений, и так до бесконечности. Почему это происходит и как это исправить, чтобы исполнение generate происходило только один раз ? |
Скорее всего, повторный вызов генератора происходит из-за того, что EventSource по умолчанию автоматически переподключается, когда соединение закрывается. Чтобы это исправить, можно либо явно закрывать соединение на сервере после последнего сообщения, либо на клиенте отключать EventSource после получения финального события.
|
Часовой пояс GMT +3, время: 23:06. |