|
Вопрос # 885/ вопрос открыт / |
|
Уважаемые эксперты доброго времени суток!
Раньше никогда толком не работал с сетями, но сейчас появилась необходимость решить один вопрос..
И так:
Необходимо: построчно получить ответ на GET запрос серверу. Скрипту PHP передаются пераметры и начинается продолжительная "работа", в процессе которой он выводит строку статуса. Выполнение всей "работы" может занять до получаса, а то и дольше. Ввиду этого воспользоваться каким либо HTTP клиентом (idHTTP и т.п.) не получится, надо выводить реальный стутус работы, а если я все правильно понял с HTTP, он (клиент) будет ждать полного выполнения "работы". Получается, нужно использовать TCPClient и читать выводимую скриптом информацию. А вот с этим возникли "небольшие проблемки".
Буду благодарен за любую информацию, совет, а особенно за маленький примерчик.
 |
Вопрос задал: Spawn (статус: 1-ый класс)
Вопрос отправлен: 2 сентября 2007, 19:16
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 3 сентября 2007, 11:07; участников в обсуждении: 2.
|
Spawn (статус: 1-ый класс), 2 сентября 2007, 21:32 [#1]:
Немного уточню свой вопрос.. Необходимо сделать клиентскую программу которая будет передавать параметры и получать статус выполнения "работы" от скрипта. Насколько, я понял это нужно реализовывать с помощью TTCPClient. Но вот здесь мои знания очень скупы..
TCPClient.SendLn(\'Get / HTTP/1.1\')
TCPClient.SendLn(\'Host host.domain\');
TCPClient.SendLn(\'Connection: Close\');
TCPClient.SendLn(\'\');
while TCPClient.Connected do
S:= TCPClient.ReceiveLn; //вот на этом месте происходят "тормоза"
Можно но ли их как нибудь избежать? Такое чувство, что TCPClient ждет определенного объема данных, и как только получает их, сразу же передает в программу.
|
|
Вадим К (статус: Академик), 3 сентября 2007, 11:07 [#2]:
>>Выполнение всей "работы" может занять до получаса, а то и дольше.
Срочно менять идеологию проги. Многие серверы (Апач к примеру) прибьют ваш запрос через минут 20, а то и раньше. HTTP протокол на это не росчитан.
Получать результаты работы " реальном режиме времени" у вас не получиться. Во первых сервер кеширует данные и отдает вам небольшими кусками на несколько килобайт. Если вы имеете доступ к скрипту, то можно вставить комаду "сбрасывать буфер" (Flush), но современные серверы её игнорируют. Также кешировать ваши ответы будет подсистема сетевого ввода-вывода. Так что меняйте идеологию!
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|