Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.17;
Скачать: CL | DM;

Вниз

Еще вопрос по поводу CGI.   Найти похожие ветки 

 
Vint45   (2003-09-20 14:08) [0]

CGI-модуль принимает данные от веб-сервера кусками (пакетами). И чтоб считать все данные я использую следующую конструкцию:

SizeFile:=StrToInt(GetEnvironmentVariable("CONTENT_LENGTH"));
while SizeFile>Length(Str) do begin
StdIn:=GetStdHandle(STD_INPUT_HANDLE);
SizeBlock:=SetFilePointer(StdIn,0,nil,FILE_END);
SetFilePointer(StdIn,0,nil,FILE_BEGIN);
BeginBlock:=Length(Str);
SetLength(Str,BeginBlock+SizeBlock);
{ Читаем данные из стандартного устройства ввода}
ReadFile(StdIn,Str[BeginBlock+1],SizeBlock,Actual,nil);
end;

Вопрос: может ли данная конструкция привести к подвисанию веб-сервера? Т.е. если соединение между клиентом и веб-сервером плохое(допустим 1 бит в сек.), то веб-сервер не сможет обрабатывать другие запросы? Ведь циклы могут привести не только зависанию программы, но операционки(Win 98). Или может веб-сервер сначала закачивает все данные, а потом уже передает их кусками CGI-модулю?


 
Verg ©   (2003-09-20 14:19) [1]

Эпиграфы:
"Зачем ты усложнил то, что проще простого" (С) Наутилус-помпилиус
"Вы на Паскале или где!"

Я вообще с трудом прочитал то, что там написано. Уж лучше б на с++ - чес-слово....

Я бы что-то типа этого написал:

var P : Pchar;
S: string;
Fields : TStringList;
I : integer;
C : char;
begin
Fields:=TStringList.Create;
try
P:=GetEnvironmentStrings;
while P^<>#0 do
begin
S:=P;
Fields.Add(S);
inc(P, length(S)+1);
end;
S:="";
for I:=0 to StrToIntDef(Fields.Values["Content_Length"],0)-1 do
begin
Read(input, C);
S:=S+C;
end;
...............


 
Vint45   (2003-09-20 14:37) [2]

Непоятно что? код? код взят из статьи этого портала "Написание CGI-приложений...". Единственное что я добавил, так запихнул исходный текст в цикл, т.к. без цикла у меня принимался кусок данных только 8192 байта (первый пакет).
Непонятен вопрос? объяснил как мог :-)
Пробую разобраться с приведенным Вами кодом. Я так понял в списке заносятся все переменные окружения, а потом выцепляется одна, а именно "Content_Length" и по ней идет цикл приема данных - ИМХО тоже самое и у меня. Я прав?


 
Verg ©   (2003-09-20 14:46) [3]


> ИМХО тоже самое и у меня. Я прав?


Может быть...

> код взят из статьи этого портала "Написание CGI-приложений...".
>


А что, file|new|web Service application теперь пользоваться уже не модно?


> Единственное что я добавил, так запихнул исходный текст
> в цикл


Угу. Вместе с


> StdIn:=GetStdHandle(STD_INPUT_HANDLE);



> Я так понял в списке заносятся все переменные окружения,
> а потом выцепляется одна, а именно "Content_Length" и по
> ней идет цикл приема данных


Сейчас одна, потом еще одна другая может понадобиться и т.д.


> то веб-сервер не сможет обрабатывать другие запросы?


Сможет. По крайней мере Apache точно сможет.


 
Vint45   (2003-09-20 14:55) [4]

Ну что ж, раз сможет, тогда хорошо. :-) Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.11.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
14-56905
Igor_thief
2003-10-23 17:01
2003.11.17
TPanel


6-56801
ilka
2003-09-22 16:30
2003.11.17
откуда ошибка (TIdTcpServer TIdTcpClient)


1-56722
Micke
2003-11-07 19:36
2003.11.17
Работа с памятью процессов


1-56556
cashe
2003-11-07 23:39
2003.11.17
Из строки, содержащей путь в TreeView


7-56921
Владимир Березин
2003-09-07 22:30
2003.11.17
Модальная форма