3 Replies Latest reply: Feb 13, 2004 5:02 PM by 807582 RSS

    Monitoring a URL!

    807582
      Hey Guys

      How would you go about constantly and effeciently monitoring a url?

      Currently, I am doing it in the most logical and simple way that came to me.

      I have a timer that wakes up every second, makes a connection to a url using the URL and URLConnection class, checks the lastModified time for the file (index.html) in my case. If the
      current timestamp is different than the previous one, I know the file has been altered.

      I am curious to find out if there exists a better (in terms of efficiency) way to monitor a url.

      Any thoughts?

      :cheers
      vic


      private class PageLoader extends TimerTask {

      BufferedReader data;
      String url = "23.87.345.234/index.html";

      public PageLoader(){}

      public void run() {
      try {
      String line;
      url = new URL(string);
      uconn = url.openConnection();
           
      long newtimestamp = uconn.getLastModified();

      if(newtimestamp > oldtimestamp){
      oldtimestamp = newtimestamp;
      BufferedReader data = new BufferedReader(new InputStreamReader(url.openStream()) );
      StringBuffer buf = new StringBuffer();

           while ( ( line = data.readLine() ) != null ) {
           buf.append( line + "\n" );
           }
      System.out.println(buf.toString());
           data.close();

      }else{
           System.err.println("Nothing has changed.");
           }
      Thread.sleep(1000);

      }catch( Exception ioe ){
      ioe.getMessage();
      }
           }
      }
        • 1. Re: Monitoring a URL!
          807582

          You've two choices when checking something... polling or catching events.
          Since the webserver isn't going to send you an event to say it's changed, you've gone the only route possible. Check it yourself at periodic intervals.

          Checking the timestamp is the quickest, which means you do not have to parse the URL.
          If you want accuracy, to ensure the file has changed, even if the timestamp has not, you'd need to generate
          a checksum on the URL stream contents.

          But, I can't see any significant improvement on what you done...
          Are you just fishing for complements !

          regards,
          Owen
          • 2. Re: Monitoring a URL!
            807582

            Cheers for the reply Mate.

            :) I am certainly not looking for compliments; I would rather have someone improve my code after
            dissecting it.

            I do appreciate your time.

            :vic
            • 3. Re: Monitoring a URL!
              807582
              The HTTP protocol allows for a conditional GET, which will retrieve the file only if it's newer than a certain timestamp. Using that, you won't have to download the entire page each time you poll the server.

              http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3