Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Вниз

Еще вопрос по поводу 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
14-56839
Thor
2003-10-27 16:49
2003.11.17
APC и иже с ними.


3-56510
Ozone
2003-10-28 07:46
2003.11.17
TADOTable


7-56923
Ihor Osov'yak
2003-09-08 12:20
2003.11.17
COM, ActiveX и записи в реестре..


7-56924
Sergei
2003-09-08 12:19
2003.11.17
Печать


3-56472
erw
2003-10-28 16:43
2003.11.17
установка BDE вручную





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский