За последние 24 часа нас посетил 17521 программист и 1687 роботов. Сейчас ищут 859 программистов ...

Сервер не запускает скрипт на выполнение пока он не освободи

Тема в разделе "Прочие вопросы по PHP", создана пользователем shipa, 2 мар 2014.

  1. shipa

    shipa Новичок

    С нами с:
    2 мар 2014
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте!
    Сделал чат: AJAX EventSource и php
    на стороне сервера отдельный файл с бесконечным циклом.
    Все работает, НО когда нажимаешь "обновить" страницу, сервер ничего не шлет пока не освободится файл с циклом (30 сек по умолчанию макс время работы php скрипта )

    как это исправить? все перепробовал. Сервер даже не запускает скрипт сайта на выполнение пока процес не освободится.

    код на java

    function chat(){
    var s = new EventSource('/parts/chat.php');

    var div=document.getElementById("chat");

    s.onmessage=function(e){
    div.innerHTML += e.data + '<br>';
    div.scrollTop += 100;
    }

    код на PHP

    <?php
    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache');
    session_start();
    include ("../include/function.php");


    while(true){
    chatout("main",$_SESSION["chatid"]);
    sleep(1);

    }

    ?>
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Re: Сервер не запускает скрипт на выполнение пока он не осво

    1. Зачем бесконечный цикл?
    2. Что такое chatout?

    Вот минута гугления и готовый пример
    http://www.techumber.com/2012/11/Simple-Chat-Engine-Using-H ... d-PHP.html
     
  3. shipa

    shipa Новичок

    С нами с:
    2 мар 2014
    Сообщения:
    3
    Симпатии:
    0
    Re: Сервер не запускает скрипт на выполнение пока он не осво

    chatout() - это функция, которая подключается в базе и отправляет новые сообщения, если есть. она работает.
    в Вашем примере есть один недочет. Он не будет держать EventSource открытым, а отработает и отключится. В следствии этого java на компе пользователя опять попросит запустить файл через 3 сек по умолчанию. т.е. получается постоянные запросы с периодом 3 сек. тогда EventSource и не нужен. или я не прав? просто я не спец)
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Re: Сервер не запускает скрипт на выполнение пока он не осво

    Зачем передаешь в функцию глобальную переменную $_SESSION["chatid"]?
    Она глобальная.

    Откуда ты вообще взял 3 секунды а не допустим 10 или час? Смотрю на тот код что то не понимаю там же этого нет. Там есть демо, ты проверял?

    То что ты используешь называется javascript а не java.
     
  5. shipa

    shipa Новичок

    С нами с:
    2 мар 2014
    Сообщения:
    3
    Симпатии:
    0
    Re: Сервер не запускает скрипт на выполнение пока он не осво

    3 секунды это умолчание от EventSource. Если соединение разорвано с сервером, реконнект через 3 сек.
    Кстати спасибо за ответы и интерес к теме!
    $_SESSION["chatid"] можно и не кидать, без разницы. я в ней храню id последнего сообщения. Или так нельзя?
    когда появилась проблема, я вынес из файла все, что работает. Теперь если цикл есть висит. Причем перейти на другую страницу связанную с чатом тоже не дает, пока соответственно не отработает.

    Цель у меня сделать чат без постоянных запросов. а без цикла php не будет держать соединение. Или как?