[Qt-interest] Persistent HTTP connections

Markus Goetz Markus.Goetz at nokia.com
Thu Feb 18 11:52:25 CET 2010


Oh.
No, it is not your fault.
It's a bug in Qt then. Calling deleteLater() is what you are supposed to 
do. I'll look into it.

Thanks for reporting.

Markus

ext Mandeep Sandhu wrote:
> Please ignore my previous mail.
>
> I found out why it was making a new connection each time. The
> reason...my code! :P
>
> I was calling deleteLater() on the repy object which was causing it to
> explicitly close the connection with the server.
>
> When I remove that, I see that the same connection is being reused for
> subsequent requests.
>
> Thanks,
> -mandeep
>
> On Thu, Feb 18, 2010 at 4:20 PM, Mandeep Sandhu
> <mandeepsandhu.chd at gmail.com> wrote:
>   
>> On Thu, Feb 18, 2010 at 2:56 PM, Mandeep Sandhu
>> <mandeepsandhu.chd at gmail.com> wrote:
>>     
>>>> In theory, it should work like that. Have you tried checking with a network
>>>> sniffer? If it's not like that, we have a bug (or let's call it performance
>>>> regression) in Qt.
>>>>         
>>> Thats exactly what I'm trying now...using a sniffer.
>>>       
>> I tried using a singleshot timer to start the next download on
>> receiving the "finished" signal (see attached source). I then used
>> "NetActViewer" (http://netactview.sourceforge.net/) to view the active
>> TCP connections to my box (where the webserver is running).
>>
>> I see that each time a new download starts, the client TCP port number
>> is changing. This means that a new TCP connection is being made each
>> time.
>>
>> I also sniffed one HTTP transaction off the wire...
>>
>> tshark shows the following for the HTTP request:
>> ...
>> ...
>> Hypertext Transfer Protocol
>>    GET /dl.txt HTTP/1.1\r\n
>>        [Expert Info (Chat/Sequence): GET /dl.txt HTTP/1.1\r\n]
>>            [Message: GET /dl.txt HTTP/1.1\r\n]
>>            [Severity level: Chat]
>>            [Group: Sequence]
>>        Request Method: GET
>>        Request URI: /dl.txt
>>        Request Version: HTTP/1.1
>>    User-Agent: QT 1.0\r\n
>>    Connection: Keep-Alive\r\n
>>    Accept-Encoding: gzip\r\n
>>    Host: 192.168.2.2\r\n
>>    \r\n
>> ...
>> ...
>>
>> HTTP response from server:
>> ...
>> ...
>> Hypertext Transfer Protocol
>>    HTTP/1.1 200 OK\r\n
>>        [Expert Info (Chat/Sequence): HTTP/1.1 200 OK\r\n]
>>            [Message: HTTP/1.1 200 OK\r\n]
>>            [Severity level: Chat]
>>            [Group: Sequence]
>>        Request Version: HTTP/1.1
>>        Response Code: 200
>>    Server: nginx/0.7.62\r\n
>>    Date: Thu, 18 Feb 2010 10:01:21 GMT\r\n
>>    Content-Type: text/plain\r\n
>>    Content-Length: 6\r\n
>>        [Content length: 6]
>>    Last-Modified: Thu, 18 Feb 2010 08:56:44 GMT\r\n
>>    Connection: keep-alive\r\n
>>    Accept-Ranges: bytes\r\n
>>    \r\n
>> ...
>> ...
>>
>> So I guess it is using the correct header...but somehow a new
>> connection is being made each time.
>>
>> -mandeep
>>
>>
>>     
>>>> To be very sure, I would suggest to not create and send the request from the
>>>> finished() slot but one event loop spin after that. You can achieve this by
>>>> using a single shot timer set to 0 msec and sending the request from the
>>>> timer's slot.
>>>>
>>>>         
>>> Thanks for this tip.
>>>
>>> Regards,
>>> -mandeep
>>>
>>>       
>>>> Markus
>>>>
>>>>         




More information about the Qt-interest-old mailing list