[Qt-interest] Persistent HTTP connections

Mandeep Sandhu mandeepsandhu.chd at gmail.com
Thu Feb 18 12:30:33 CET 2010


On Thu, Feb 18, 2010 at 4:22 PM, Markus Goetz <Markus.Goetz at nokia.com> wrote:
> 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.

Oh ok. One more question.

Will there be memory leak if i don't call deleteLater() for _every_
response, but call it only once when all downloads have finished?

Thanks,
-mandeep

>
> 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