Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.07.2025, 18:31
Новичок на форуме
Отправить личное сообщение для YuryS Посмотреть профиль Найти все сообщения от YuryS
 
Регистрация: 05.07.2025
Сообщений: 1

Бесконечное исполнение 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 происходило только один раз ?
Ответить с цитированием
  #2 (permalink)  
Старый Сегодня, 13:05
Новичок на форуме
Отправить личное сообщение для akiraki22lvl Посмотреть профиль Найти все сообщения от akiraki22lvl
 
Регистрация: 09.09.2025
Сообщений: 3

Скорее всего, повторный вызов генератора происходит из-за того, что EventSource по умолчанию автоматически переподключается, когда соединение закрывается. Чтобы это исправить, можно либо явно закрывать соединение на сервере после последнего сообщения, либо на клиенте отключать EventSource после получения финального события.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бесконечное движение видео по горизонтали Saitama Общие вопросы Javascript 1 08.02.2019 11:06
Фоновое исполнение скрипта в браузере operbond Ваши сайты и скрипты 2 18.03.2018 21:29
Как просмотреть в браузере исполнение этого кода Вася2002 Events/DOM/Window 9 27.08.2015 20:28
Как присвоить текстовому полю исполнение функции? vistecter Элементы интерфейса 2 24.06.2011 20:16
Динамическая подзагрузка и исполнение скриптов NT Man Javascript под браузер 2 28.08.2009 12:32