Ответы пользователя по тегу Server-Sent Events
  • Как запустить парсер посредством POST и отдать его события через evensource?

    avalak
    @avalak
    GET запросы не должны менять состояние.

    1. Делаете post запрос к форме.
    1.a На сервере добавляете задание в очередь, клиенту возращаете json с id стрима
    2. На клиенте слушаете sse с этим id.
    2.a Воркер пишет в sse со связанным id события

    Либо, если sse у вас уже открыт, возвращаете id задачи, а в sse отправляете события связанные с этим id. Если задач больше одной это лучший вариант.
    Ответ написан
    Комментировать
  • Несколько вопросов по работе с библиотекой EventSource?

    avalak
    @avalak
    0. Библиотека о которой вы каждый раз упоминаете - polyfill. Она нужна для реализации SSE в старых и кривых браузерах. Нет смысла писать о ней каждый раз (особенно учитывая что вы пытаетесь сделать сервер).

    1. Это демо из библиотеки. Просто чтобы посмотреть что библиотека работает.

    Подскажите пожалуйста зачем тут использовать цикл ?

    Я даже не знаю что на это ответить. Цикл нужен чтобы циклически выполнять действия. Ваш КО.

    Что происходит в цикле:
    - если прошло больше 10 секунд завершаем работу
    - пишем данные
    - сбрасываем буфер
    - спим 4 секунды

    Если же убрать данный цикл, то после каждой отдачи данных будет реконект

    А чего вы ждали? Скрипт выполнил свою работу и умер.

    Даже если оставить
    ob_flush();
    flush();

    Это для принудительной отправки данных пользователю.

    То реконект будет примерно через секунд 30.

    Время жизни php ограниченно. Он создан чтобы умирать. Умирать через 30 секунд (вероятно именно 30 секунд указанно в настройках).

    И вопрос номер 3. Как лучше всего сделать обновление в реал тайме с помощью данной библиотеки, сколько секунд будет оптимально держать соединение, какая должна быть чистота обновления (тоесть раз в сколько секунд посылать запрос), как часто нужно делать реконект ?


    Ещё раз. Это библиотека для браузера. В случае с SSE соединение не должно разрываться. В вашем случае оно разрывается из-за использования php.
    Чтобы не разрывалось (оптимальное применение) нужно использовать node, tornado или что-то подобное
    Ответ написан
    2 комментария
  • SSE, постоянно попадает в метод ошибки

    avalak
    @avalak
    Неужели так сложно прочитать спеки? Там же всё подробно расписанно.

    When a user agent is to reestablish the connection, the user agent must queue a task to set the readyState attribute to CONNECTING and fire a simple event named error at the EventSource object, and then, after a delay equal to the reconnection time of the event source, if the readyState attribute is still set to CONNECTING, once again do a potentially CORS-enabled fetch of the absolute URL of the event source resource, with the mode being Use Credentials, and the origin being the same as the origin used in the original request triggered by the EventSource() constructor, and process the resource obtained in this fashion, if any, as described in this section.


    1. Соединение устанавливается. => open
    2. Данные принимаются. => message
    3. php дохнет => соединение закрывается. EventSource бросает error и пытается восстановить соединение.
    Ответ написан
    Комментировать
  • SSE php и javascript

    avalak
    @avalak
    1. Пустая строка это часть протокола.
    2. error возникает и при закрытии соединения.
    Ответ написан
    1 комментарий