[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