За последние 24 часа нас посетили 33002 программиста и 1821 робот. Сейчас ищут 872 программиста ...

Непонятица с SSE

Тема в разделе "PHP для новичков", создана пользователем Great_DUKE, 25 окт 2016.

  1. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    Открываю я значит соединение с сервером
    PHP:
    1. <?
    2. header("Content-Type: text/event-stream");
    3.  
    4. echo "data: test\n\n";
    В консоли браузера выводится ответ сервера - "test".
    Когда я меняю
    PHP:
    1. echo "data: test\n\n";
    на
    PHP:
    1. echo "data: test_2\n\n";
    То сервер не сразу реагирует на новый data, и присылает мне сообщение "test", вместо "test_2".
    Сервер реагирует на то, что код изменился через соединений 10-20.
    Что не так?

    И еще, как сделать бесконечное время выполнения скрипта?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    через cli, но PHP не рассчитан на это, могут быть глюки.

    что такое SSE и что ты вообще делаешь? какой сервер?
     
  3. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    SSE - Server Side Events. Вот страница с описанием https://learn.javascript.ru/server-sent-events
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    так ты реализовал сервер для SSE или те 2 echo и есть весь сервер?
     
  5. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    Возможно, я не правильно выразился. Для SSE я создал определенную страницу.
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Просто файл?
     
  7. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    Именно, вот содержимое файла
    PHP:
    1. <?
    2. header("Content-Type: text/event-stream");
    3.  
    4. echo "data: test\n\n";
    А вот js код на стороне клиента
    Код (Javascript):
    1. var eventSource = new EventSource('https://my_domain/path/test.php');
    2. eventSource.onopen = function(e) {
    3.   console.log("Соединение открыто");
    4. };
    5.  
    6. eventSource.onerror = function(e) {
    7.   if (this.readyState == EventSource.CONNECTING) {
    8.     console.log("Соединение порвалось, пересоединяемся...");
    9.   } else {
    10.     console.log("Ошибка, состояние: " + this.readyState);
    11.   }
    12. };
    13.  
    14. eventSource.onmessage = function(e) {
    15.   console.log("Пришли данные: " + e.data);
    16. };
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    может кэш? смотри заголовки которые отдаёт сервер
     
  9. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    Вряд ли. Кэш браузера я очищал, ничего не изменялось.
    Также я пробовал, перед очистки кэша браузера, сделать так
    PHP:
    1. <?
    2. header("Content-Type: text/event-stream");
    3.  
    4. $rand = rand(0, 500);
    5. echo "data: $rand\n\n";
    После очистки кэша, все также выводилось рандомное число. Возможно ли так, что PHP код кэшируется?
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    так надо заголовки смотреть, можно и запросы через fiddler посмотреть

    не, думаю вебсервер кэширует или заголовки связанные с куешом отдаёт
     
  11. Kotofey

    Kotofey Новичок

    С нами с:
    20 окт 2016
    Сообщения:
    8
    Симпатии:
    5
    Не пробовал сделать:
    PHP:
    1. <?
    2. header("Content-Type: text/event-stream");
    3. echo "data: test\n\n";
    4. sleep(1);
    5. echo "data: test_2\n\n";
    ?
     
  12. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    Эту проблему я решил, теперь возникает другая проблема. Когда я вставил это JS код на основную страницу сайта
    Проблему решил, но возникла другая. Когда я вставил указанный мною JS код в основную страницу, и в этот PHP файл вставил бесконечный цикл, который проверяет наличие обновлений в БД, страница стала бесконечно загружаться. Как только я делаю цикл не бесконечным, страница нормально загружается. Как решить данную проблему?
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    запускай свой сервер на PHP через cli, он может вечно работать, вот товарищь который так делал получил проблемы https://php.ru/forum/threads/padenie-skripta.60546/ но вроде решил их