Lars Gehre wrote:
> I think, I found something.

Thanks for reporting, I just checked in a fix.
Available via SVN now or included in next daily snapshot
here: http://wiki.overbyte.be/wiki/index.php/ICS_Download

-- 
Arno Garrels 

 
> The problem seems to be the head request. Normaly you do a HEAD and
> close the connection, but in my case it stays open and the http
> server gets stuck in an endless loop.
> 
> The culprits are:
> 
> procedure THttpConnection.SendDocument(SendType : THttpSendType;const
> CustomHeaders : String);
> and
> procedure THttpConnection.ConnectionDataSent(Sender : TObject; Error :
> WORD);
> 
> In SendDocument the fdocsize gets set to the size of the stream and a
> 
> if SendType = httpSendHead then
>        FDocStream.Seek(0, soFromEnd)
> 
> And
>        if SendType = httpSendDoc then
>            SendStream
>        else
>            Send(nil, 0); { Added 15/04/02 } // this one triggers the
> ConnectionDataSent.
> 
> 
> In ConnectionDataSent FDataSent >= FDocSize is the end trigger but
> 
> ToSend := FDocSize - FDataSent;  //fdatasent = 0
>    if ToSend > FSndBlkSize then
>        ToSend := FSndBlkSize;
>    Count     := FDocStream.Read(FDocBuf^, ToSend); // =0 because of
> FDocStream.Seek(0, soFromEnd) in SendDocument
>    FDataSent := FDataSent + Count;      { Count data which is sent
> }  // 0 + 0 = 0
>    if State = wsConnected then          { Be sure to be still
> connected... }
>        Send(FDocBuf, Count);            { before actually send any
> data. }  // starts it all over again...
> 
> Maybe a
>    if (FDataSent >= FDocSize) or
> (FDocStream.Position=FDocStream.Size) then begin
> 
> might be a solution, but I don't know enough of the inner workings of
> the http component to foresee possible side effects...
> 
> Lars
> 
> 
> 
>> -----Original Message-----
>> From: twsocket-boun...@elists.org
>> [mailto:twsocket-boun...@elists.org] On Behalf Of Lars Gehre
>> Sent: Thursday, June 30, 2011 9:49 PM
>> To: 'ICS support mailing'
>> Subject: Re: [twsocket] HTTP Server creates extremly high CPU load
>> 
>> Well I was a little to fast with my conclusion. It only
>> happens to files in the demo because they have a proper
>> header, the virtual documents only give a 404 for a HEAD request.
>> 
>> The download is not of matter, the demo files are 500 bytes
>> or so. And the server load stays as long as the client is connected.
>> 
>> As I said, I was able to replicate this on two different
>> machines and it is not limited to local access. cross tests
>> between the machines also show this behaviour.
>> 
>> Lars
>> 
>> 
>>> -----Original Message-----
>>> From: twsocket-boun...@elists.org
>>> [mailto:twsocket-boun...@elists.org] On Behalf Of Arno Garrels
>>> Sent: Thursday, June 30, 2011 3:49 PM
>>> To: ICS support mailing
>>> Subject: Re: [twsocket] HTTP Server creates extremly high CPU load
>>> 
>>> Lars Gehre wrote:
>>>> I noticed one thing: This only happens if files are involved, for
>>>> virtual documents it does not happen.
>>> 
>>> I cannot reproduce it, 0.0% CPU here.
>>> I used the OverbyteIcsWebServ demo running on a Win7 quadcore.
>>> However if I download a file with Firefox (100 Mbit/s LAN)
>> at around 6
>>> MB/s CPU 0 uses ~25-30% and CPU 2 8-15%, overall usage of
>> the server
>>> process ~8-10% reported by Process Explorer.
>>> 
>>> --
>>> Arno Garrels
>>> 
>>> 
>>> 
>>>> 
>>>> For the http server demo it means you need to open Index.html or
>>>> Form.html.
>>>> 
>>>> Lars
>>>> 
>>>>> -----Original Message-----
>>>>> From: twsocket-boun...@elists.org
>>>>> [mailto:twsocket-boun...@elists.org] On Behalf Of Lars Gehre
>>>>> Sent: Thursday, June 30, 2011 11:21 AM
>>>>> To: 'ICS support mailing'
>>>>> Subject: [twsocket] HTTP Server creates extremly high CPU load
>>>>> 
>>>>> Hello all,
>>>>> 
>>>>> I have a serious problem with the http server component from
>>>>> ICS7 (downloaded from the repository last week).
>>>>> 
>>>>> I'm using the wininet api on the client side to open a (GET)
>>>>> connection to a ICS http Server.
>>>>> For certain reasons I need to query the HEAD in intervals (while
>>>>> the other get is still in progress).
>>>>> As soon as I send the second request the CPU load of the http
>>>>> server maxes out one CPU core.
>>>>> 
>>>>> Steps to reproduce:
>>>>> 
>>>>> - Run the http server demo from ics.
>>>>> 
>>>>> - Download the demo
>>>>> www.dvbviewer.tv/icsproblem/icsproblem.zip source (delphi 7)
>>>>> 
>>>>> - Run the demo, enter the url of the demo server and press the
>>>>> button.
>>>>> 
>>>>> - As soon as the call to GetFileSize is finished you see the CPU
>>>>> load of the webserver going up.
>>>>> 
>>>>> 
>>>>> I checked it on two windows 7 (multicore) machines with the same
>>>>> result.
>>>>> 
>>>>> I also checked it against several other http servers and none of
>>>>> them had a problem with this kind of usage.
>>>>> 
>>>>> 
>>>>> Thanks
>>>>> Lars
>>>>> 
>>>>> --
>>>>> To unsubscribe or change your settings for TWSocket mailing list
>>>>> please goto
>>>>> http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
>>>>> Visit our website at http://www.overbyte.be
>>> --
>>> To unsubscribe or change your settings for TWSocket mailing list
>>> please goto
>> http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
>>> Visit our website at http://www.overbyte.be
>>> 
>> 
>> --
>> To unsubscribe or change your settings for TWSocket mailing
>> list please goto
>> http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
>> Visit our website at http://www.overbyte.be
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to