Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вывести в браузер не дожидаясь завершения 
:(
    Опции темы
Валерия
Дата 20.4.2007, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Код

#include <stdio.h>
#include <dos.h>

void main(){
    printf("Content-type: text/html\nPragma: no-cache\n\n");

    for (int i=0;i<10;i++){
        printf("TEST<BR>");
        delay(500);
    }
}


Такое в компиляторе работает правильно: каждые пол секунды выводит на экран TEST<BR>
А если я его юзаю как cgi то оно через 5 секунд выводит в браузер сразу всё.
В php есть функция flush() которая выводит содержимое буфера а затем очищает его.
А как быть тут?
Нужно что бы в браузер это выводилось каждые пол секунды.
PM MAIL   Вверх
azesmcar
Дата 20.4.2007, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



как то неправильно это чтобы cgi так долго работал...но все же попробуй вместо printf использовать потоки
Код

#include <iostream>
#include <dos.h>
void main(){
    printf("Content-type: text/html\nPragma: no-cache\n\n");
    for (int i=0;i<10;i++) {
        std::cout << "test<br>" << std::endl;
        delay(500);
    }
}


std::endl сделает тоже самое что и flush()

но это может не помочь так как если не ошибаюсь веб-сервер дожидается завершения скрипта и только после этого берет его выходные данные и выводит на страницу...хотя я могу и ошибаться.

Это сообщение отредактировал(а) azesmcar - 20.4.2007, 07:46
PM   Вверх
Валерия
Дата 20.4.2007, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Не выходит.
Выводит только после того как завершается работа скрипта все сразу.
PM MAIL   Вверх
Валерия
Дата 22.4.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Еще есть какието методы?
PM MAIL   Вверх
azesmcar
Дата 23.4.2007, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Не лучше написать функцию JavaScript и установить таймер?
PM   Вверх
Валерия
Дата 23.4.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



azesmcar
Нет, мне нужно именно так smile
У меня будет 
while (1==1){
тут читаем из файла, и если есть новое то выводим в браузер
sleep(10);
}
Тоесть чат без рефреша)
Я на php уже такое писала, но у меня не получилось сделать слип меньше 1 секунды, т.к usleep под виндой не пашет.
PM MAIL   Вверх
GremlinProg
Дата 24.4.2007, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 1
Всего: 106



Я ведь все правильно понимаю, это CGI?

Тут просто нужно учесть, что задержки в работе CGI-скрипта, независимо от языка, не влияют на задержки в браузере. Это просто программка, которая генерирует HTML, который уже потом, после завершения, пересылает его в сеть, этот процесс зависит от HTTP-сервера, на котором CGI запускается. Чтобы фактически создать задержки с выводом в браузере, нужно все таки воспользоваться средствами инлайн-языка, например JavaScript, либо (сумасшедший вариант) пересылать HTML минуя сервер, и то, результат будет зависеть от того, генерирует ли браузер на приемной стороне страничку по факту прибытия чего-либо, либо по факту приема только всего пакета.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Спец
Дата 24.4.2007, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 2.11.2006

Репутация: -2
Всего: -2



Цитата(azesmcar @ 20.4.2007,  07:45)
как то неправильно это чтобы cgi так долго работал...


почему не правильно? Где то есть правило?

Добавлено через 5 минут и 18 секунд
Валерия    а че правда чтоли на php эт сделать можно?
Помоему процедура происходит так, браузер читает из соккета, и если данные зкончились, то ставит завершаю нуль в конце всех принятых данных, и выводит их.. 
а задумка с чатом не плохая.. ток технологии нынешные не позволят тебе это сделать, а если и позволят /* сомневается */ то всё будет жудко тормозить

PM MAIL   Вверх
Спец
Дата 24.4.2007, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 2.11.2006

Репутация: -2
Всего: -2



хотя, я не выспался просто.. Валерия, смотри, ты когда запускаеш exe. через веб сервер, то копия этого exe файла грузится в оперативку и выполняет (причем твой выполняется вечноsmile), а если кто-нибуть еще запустит его (т.е. войдет в чат) создастся еще одна копия и .т.д. лучше на php пиши, проще намного и всё уже сделанно

PM MAIL   Вверх
nerezus
Дата 24.4.2007, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Код

fflush(stdout);



--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Yama
Дата 24.4.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: нет
Всего: 2



Цитата(Валерия @  20.4.2007,  00:27 Найти цитируемый пост)
Такое в компиляторе работает правильно: каждые пол секунды выводит на экран TEST<BR>
А если я его юзаю как cgi то оно через 5 секунд выводит в браузер сразу всё.

Проблема в том, что CGI-скрипты рендерят страничку и только после рендеринга выводят ее на экран. Т.е. у тебя страничка генерится 2.5+ секунды из-за задержек, и только потом выводится на экран. Что бы сделать то, что ты хочешь, надо юзать джава-скрипт или ajax(если надо динамически подгружать данные на страницу).
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
Валерия
Дата 24.4.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Я уже юзала джаваскрипт, причем можно сказать свой аджакс писала)
Но ведь мне нужно именно то что я спросила.
Раз нельзя так нельзя... 
PM MAIL   Вверх
Yama
Дата 24.4.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: нет
Всего: 2



Цитата(Валерия @  24.4.2007,  15:39 Найти цитируемый пост)
Раз нельзя так нельзя...  

То, что ты хотела сделать, это раз в 5 секунд отправлять с сервера пакет клиенту, но по своей сути протокол хттп не предостовляет возможности серверу посылать запросы клиенту. Любая интерактивнасть, которую ты видишь на веб-страничках, достигается либо gif-flash- анимацией и различными запросами по таймеру или событию, которыее генерят скрипты на странице.

P.S. да, и 1 совет: слезай с CGI .  В мире веб-технологий CGI-скрипты - это начало позапрошлого века  smile . Но это уже другая тема.  . Удачки. smile 

Это сообщение отредактировал(а) Yama - 24.4.2007, 15:54
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
Валерия
Дата 25.4.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Я только пытаюсь залезть на него)))
А поповоду http протокола - бред.
В php вот такое пашет на ура:
<?
for ($i=0;$i<5;$i++){
echo $i;
flush();
}
?>
PM MAIL   Вверх
Kipter
Дата 2.5.2007, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 2.5.2006

Репутация: нет
Всего: нет



Не все серверы тебе разрешат держать постоянное соеденение с браузером, не все браузеры будут постоянно держать соеденение с сервером и т д, есть тайм-ауты и соеденение когда то будет разорвано.... может быть и такое =)
лучше постарайся обойтись средствами JavaScript и всетаки промежутками с сервера брать новые сообщения
а в чат фрейм добавлять каким нить .innerHTML+= newMessage;
а обновлять скрытый iframe....

а хочешь постоянные соеденения.... ну незнаю... делай чат на Flash, там есть работа с сокетами.... а серверную часть можно вообще свою на Сях написать без Apache...

Yama
так какие же технологии использовать сейчас?
давайте начнем дискуссию....
http://forum.vingrad.ru/forum/topic-149115...y1118874/0.html

Это сообщение отредактировал(а) Kipter - 2.5.2007, 02:10
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0906 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.