Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Сети > Как вывести в браузер не дожидаясь завершения |
Автор: Валерия 20.4.2007, 00:27 | ||
Такое в компиляторе работает правильно: каждые пол секунды выводит на экран TEST<BR> А если я его юзаю как cgi то оно через 5 секунд выводит в браузер сразу всё. В php есть функция flush() которая выводит содержимое буфера а затем очищает его. А как быть тут? Нужно что бы в браузер это выводилось каждые пол секунды. |
Автор: azesmcar 20.4.2007, 07:45 | ||
как то неправильно это чтобы cgi так долго работал...но все же попробуй вместо printf использовать потоки
std::endl сделает тоже самое что и flush() но это может не помочь так как если не ошибаюсь веб-сервер дожидается завершения скрипта и только после этого берет его выходные данные и выводит на страницу...хотя я могу и ошибаться. |
Автор: Валерия 20.4.2007, 21:45 |
Не выходит. Выводит только после того как завершается работа скрипта все сразу. |
Автор: Валерия 22.4.2007, 19:13 |
Еще есть какието методы? |
Автор: azesmcar 23.4.2007, 08:31 |
Не лучше написать функцию JavaScript и установить таймер? |
Автор: Валерия 23.4.2007, 19:33 |
azesmcar, Нет, мне нужно именно так ![]() У меня будет while (1==1){ тут читаем из файла, и если есть новое то выводим в браузер sleep(10); } Тоесть чат без рефреша) Я на php уже такое писала, но у меня не получилось сделать слип меньше 1 секунды, т.к usleep под виндой не пашет. |
Автор: GremlinProg 24.4.2007, 01:21 |
Я ведь все правильно понимаю, это CGI? Тут просто нужно учесть, что задержки в работе CGI-скрипта, независимо от языка, не влияют на задержки в браузере. Это просто программка, которая генерирует HTML, который уже потом, после завершения, пересылает его в сеть, этот процесс зависит от HTTP-сервера, на котором CGI запускается. Чтобы фактически создать задержки с выводом в браузере, нужно все таки воспользоваться средствами инлайн-языка, например JavaScript, либо (сумасшедший вариант) пересылать HTML минуя сервер, и то, результат будет зависеть от того, генерирует ли браузер на приемной стороне страничку по факту прибытия чего-либо, либо по факту приема только всего пакета. |
Автор: Спец 24.4.2007, 07:26 | ||
почему не правильно? Где то есть правило? Добавлено через 5 минут и 18 секунд Валерия а че правда чтоли на php эт сделать можно? Помоему процедура происходит так, браузер читает из соккета, и если данные зкончились, то ставит завершаю нуль в конце всех принятых данных, и выводит их.. а задумка с чатом не плохая.. ток технологии нынешные не позволят тебе это сделать, а если и позволят /* сомневается */ то всё будет жудко тормозить |
Автор: Спец 24.4.2007, 07:43 |
хотя, я не выспался просто.. Валерия, смотри, ты когда запускаеш exe. через веб сервер, то копия этого exe файла грузится в оперативку и выполняет (причем твой выполняется вечно![]() |
Автор: nerezus 24.4.2007, 07:51 | ||
|
Автор: Валерия 24.4.2007, 15:39 |
Я уже юзала джаваскрипт, причем можно сказать свой аджакс писала) Но ведь мне нужно именно то что я спросила. Раз нельзя так нельзя... |
Автор: Yama 24.4.2007, 15:51 |
То, что ты хотела сделать, это раз в 5 секунд отправлять с сервера пакет клиенту, но по своей сути протокол хттп не предостовляет возможности серверу посылать запросы клиенту. Любая интерактивнасть, которую ты видишь на веб-страничках, достигается либо gif-flash- анимацией и различными запросами по таймеру или событию, которыее генерят скрипты на странице. P.S. да, и 1 совет: слезай с CGI . В мире веб-технологий CGI-скрипты - это начало позапрошлого века ![]() ![]() |
Автор: Валерия 25.4.2007, 16:55 |
Я только пытаюсь залезть на него))) А поповоду http протокола - бред. В php вот такое пашет на ура: <? for ($i=0;$i<5;$i++){ echo $i; flush(); } ?> |
Автор: Kipter 2.5.2007, 02:00 |
Не все серверы тебе разрешат держать постоянное соеденение с браузером, не все браузеры будут постоянно держать соеденение с сервером и т д, есть тайм-ауты и соеденение когда то будет разорвано.... может быть и такое =) лучше постарайся обойтись средствами JavaScript и всетаки промежутками с сервера брать новые сообщения а в чат фрейм добавлять каким нить .innerHTML+= newMessage; а обновлять скрытый iframe.... а хочешь постоянные соеденения.... ну незнаю... делай чат на Flash, там есть работа с сокетами.... а серверную часть можно вообще свою на Сях написать без Apache... Yama, так какие же технологии использовать сейчас? давайте начнем дискуссию.... http://forum.vingrad.ru/forum/topic-149115/anchor-entry1118874/0.html |