Текущий архив: 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.45 MB
Время: 0.01 c