[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