Connection tester

Sparky Samnsparky at gmail.com
Wed Jun 10 13:37:59 EDT 2009


On Jun 10, 10:01 am, Jeff McNeil <j... at jmcneil.net> wrote:
> On Jun 10, 10:26 am, Sparky <Samnspa... at gmail.com> wrote:
>
>
>
> > Hey! I am developing a small application that tests multiple websites
> > and compares their "response time". Some of these sites do not respond
> > to a ping and, for the measurement to be standardized, all sites must
> > have the same action preformed upon them. Another problem is that not
> > all of the sites have the same page size and I am not interested in
> > how long it takes to load a page but instead just how long it takes
> > for the website to respond. Finally, I am looking to keep this script
> > platform independent, if at all possible.
>
> > Here is the code:
>
> >     try:
> >         # Get the starting time
> >         origTime = time.time()
>
> >         # Create the socket connection and then close
> >         s = socket.socket(AF_INET, SOCK_STREAM)
> >         s.connect((targetIP, port))
> >         s.send("GET / HTTP/1.0\r\n\r\n")
> >         result = s.recv(1024)
> >         s.shutdown(SHUT_RDWR)
>
> >     except:
> >         result = ""
>
> >     # Check for problems and report back the time
> >     if result == "":
> >         return Result((time.time() - origTime) * 1000, True)
> >     else:
> >         return Result((time.time() - origTime) * 1000, False)
>
> > Result is just an object that holds the time it took for the method to
> > finish and if there were any errors. What I am worried about is that
> > the socket is potentially closed before the website can finish sending
> > in all the data. Does anyone have any suggestions or is the script
> > fine as it is?
>
> ICMP and application-level response times are two different animals.
> Are you interested in simply whether or not a server is up and
> responding, or do you care about the actual response time and
> performance of the web site you're checking? I did something like this
> recently and there were a few different metrics we wound up using.
> Connect time, first-byte, page download, DNS resolution, and so on.
>
> Since you don't care about any of that, just use a HEAD request. It
> will return the response headers, but as per specification it will not
> return a message body.  Take a look at "http://www.w3.org/Protocols/
> rfc2616/rfc2616-sec9.html" for a full primer on the different verbs.
>
> A somewhat simplistic alternative would be to connect to port 80 on
> the destination server and drop the connection once it has been made.
> This will tell you how long it took to establish a TCP session and
> that something is indeed listening on the destination port. That's
> slightly more information than you would get from an ICMP reply.

Thank you all for your responses. I will play with everything but the
HEAD request seems to be what I was looking for.

Sam



More information about the Python-list mailing list