За последние 24 часа нас посетили 59873 программиста и 1771 робот. Сейчас ищут 835 программистов ...

Обмен данными в RealTime Mode

Тема в разделе "Прочие вопросы по PHP", создана пользователем AGE, 15 дек 2006.

  1. AGE

    AGE Активный пользователь

    С нами с:
    15 дек 2006
    Сообщения:
    4
    Симпатии:
    0
    Такой вопрос может кто сталкивался:
    PHP скрипт выдает всю выдачу Apache-у только после того как будет завершен скрипт. Можно ли как-то это обойти и выдавать выдачу по частям в процессе работы скрипта?
    Как пример скрипт:
    print "123";
    Пауза в 10 минут
    print "567";

    Чтобы он выдал клиенту 123 сразу потом сделал паузу и потом 567, а не так-пауза 1234567.

    Была функция проверки коннекта с клиентом, но этого не достаточно. Планируется запускать скрипт на многочасовое исполнение с постоянным ежеминутным мониторингом его состояния и передачей данных. Передача через 3 сервер исключена (сервак исполняющий скрипт режет исходящие соединения).

    Кто знает как это реализовать именно на PHP?
     
  2. avm

    avm Активный пользователь

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    отдавайте блоками бОльшими чем размер tcp-пакета (обычно 512-1500 байт)

    да.. и никаких <table> ессно...
     
  3. AGE

    AGE Активный пользователь

    С нами с:
    15 дек 2006
    Сообщения:
    4
    Симпатии:
    0
    А он вообще будет отдавать блоками? Он разве не ждет конца скрипта?
    мож там функцию надо какую использовать чтобы он выдачу отдавал?
     
  4. AGE

    AGE Активный пользователь

    С нами с:
    15 дек 2006
    Сообщения:
    4
    Симпатии:
    0
    Еще вопрос на эту же тему:
    Если скрипт уже работает и принял свои параметры из ENV, можно ли каким-нибудь образом ему отсылать новые данные чтобы он их принимал в этой же TCP сессии без перезапуска скрипта?

    Тое чтобы был полнофункциональный обмен с работающим скриптом без его перезагрузки.
     
  5. avm

    avm Активный пользователь

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    если в скрипте не используется буферизация вывода ob_start(), то web-сервер отдает контент при заполнении своего буфера (обычно достаточно дать ему 512 пробелов) и при этом никто не ждет никакого завершения скрипта...
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    AGE

    запуская скрипт не из под апачи а как CGI и слушай сокет.
    далее как душа ляжет.
     
  7. avm

    avm Активный пользователь

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    AGE, по "второму" вашему вопросу:
    1) каждый запрос броузера к веб-серверу - новый запуск скрипта
    2) но можно сделать так чтобы скрипт сам принимал запросы (см.доки по работе с сокетами)
     
  8. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Не знаю, хорошая ли идея:
    PHP:
    1. <?php
    2.  
    3.  
    4. echo "123";
    5. flush ();
    6.  
    7. sleep (60 * 10);
    8.  
    9. echo "456";
    10. flush ();
     
  9. avm

    avm Активный пользователь

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    Vitas, вы спрашиваете? лучше бы попробовали...

    Попробуйте лучше вот так:
    PHP:
    1. <?php
    2. print "123". str_repeat(" ", 512);
    3. sleep(20);
    4. print "123". str_repeat(" ", 512);
    5. ?>
     
  10. AGE

    AGE Активный пользователь

    С нами с:
    15 дек 2006
    Сообщения:
    4
    Симпатии:
    0
    Нет прав на открытие порта. Файервол позволяет только через 80.

    Так, flush действительно кажется то, что надо.
    Теперь как всетаки получать параметры в данной сессии?

    Может как-нибудь попробывать перехватить сокет соединения или раздвоить его на два чтобы был recive сразу аппачу и скрипту?
    Может есть какие-нибудь типы заголовков для апача для передачи дополнительных параметров?

    Можно конечно сделать еще один скрипт который будет принимать параметры в файл или в сокет домена Unix, но это не красиво и задержки с блокировками, хотелось бы покрасивей сделать. по человечески.