[Qt-interest] Persistent HTTP connections

Mandeep Sandhu mandeepsandhu.chd at gmail.com
Thu Feb 18 11:54:43 CET 2010


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