SpiderIntenalWorkload类的实现

 SpiderIntenalWorkload类:

本类完全是为IWorkStorable接口方法的具体实现。存储在计算机内存中。用了hashtable和vector来存储URL。

方法比较简单,具体代码如下:

  1. package com.heaton.bot;
  2. import java.util.Enumeration;
  3. import java.util.Hashtable;
  4. import java.util.Vector;
  5. /**
  6.  * This class is used to maintain(保存)an internal,
  7.  * memory based workload store for a spider. This
  8.  * workload store will be used by default(默认), if no
  9.  * other is specified.
  10.  */
  11. public class SpiderInternalWorkload implements IWorkloadStorable {
  12.   /**
  13.    * A list of complete workload items.
  14.    */
  15.   Hashtable complete = new Hashtable();
  16.   /**
  17.    * A list of waiting workload items.
  18.    */
  19.   Vector waiting = new Vector();
  20.   /**
  21.    * A list of running workload items.
  22.    */
  23.   Vector running = new Vector();
  24.   /**
  25.    * Call this method to request a URL
  26.    * to process. This method will return
  27.    * a WAITING URL and mark it as RUNNING.
  28.    *
  29.    * @return The URL that was assigned.
  30.    */
  31.   synchronized public String assignWorkload()
  32.   {
  33.     if ( waiting.size()<1 )
  34.       return null;
  35.     String w=(String)waiting.firstElement();
  36.     if ( w!=null ) {
  37.     
  38.       /*
  39.        * 从waiting列表中把请求得到的URL除去,
  40.        * 加入到running列表中。
  41.        */
  42.       waiting.remove(w);
  43.       running.addElement(w);
  44.     }
  45.     Log.log(Log.LOG_LEVEL_TRACE,"Spider workload assigned:" + w);
  46.     return w;
  47.   }
  48.   /**
  49.    * Add a new URL to the workload, and
  50.    * assign it a status of WAITING.
  51.    * 指定为waiting状态。
  52.    * @param url The URL to be added.
  53.    */
  54.   synchronized public void addWorkload(String url)
  55.   {
  56.      /*
  57.       * 首先判断如果url已有状态属性,则返回。
  58.       */
  59.     if ( getURLStatus(url) != IWorkloadStorable.UNKNOWN )
  60.       return;
  61.     waiting.addElement(url);
  62.     Log.log(Log.LOG_LEVEL_TRACE,"Spider workload added:" + url);
  63.   }
  64.   /**
  65.    * Called to mark this URL as either
  66.    * COMPLETE or ERROR.
  67.    *
  68.    * @param url The URL to complete.
  69.    * @param error true - assign this workload a status of ERROR.
  70.    * false - assign this workload a status of COMPLETE.
  71.    */
  72.   synchronized public void completeWorkload(String url,boolean error)
  73.   {        
  74.     running.remove(url);
  75.     if ( error ) {
  76.       Log.log(Log.LOG_LEVEL_TRACE,"Spider workload ended in error:" + url);
  77.       complete.put(url,"e");
  78.     } else {
  79.       Log.log(Log.LOG_LEVEL_TRACE,"Spider workload complete:" + url);
  80.       complete.put(url,"c");
  81.     }   
  82.   }
  83.   /**
  84.    * Get the status of a URL.
  85.    *
  86.    * @param url Returns either RUNNING, ERROR
  87.    * WAITING, or COMPLETE. If the URL
  88.    * does not exist in the database,
  89.    * the value of UNKNOWN is returned.
  90.    * @return Returns either RUNNING,ERROR,
  91.    * WAITING,COMPLETE or UNKNOWN.
  92.    */
  93.   synchronized public char getURLStatus(String url)
  94.   {
  95.     if ( complete.get(url)!=null )
  96.       return COMPLETE;
  97.     if ( waiting.size()>0 ) {
  98.       for ( Enumeration e = waiting.elements() ; e.hasMoreElements() ; ) {
  99.         String w = (String)e.nextElement();
  100.         if ( w.equals(url) )
  101.           return WAITING;
  102.       }
  103.     }
  104.     if ( running.size()>0 ) {
  105.       for ( Enumeration e = running.elements() ; e.hasMoreElements() ; ) {
  106.         String w = (String)e.nextElement();
  107.         if ( w.equals(url) )
  108.           return RUNNING;
  109.       }
  110.     }
  111.     return UNKNOWN;
  112.   }
  113.   /**
  114.    * Clear the contents of the workload store.
  115.    */
  116.   synchronized public void clear()
  117.   {
  118.     waiting.clear();
  119.     complete.clear();
  120.     running.clear();
  121.   }
  122. }

没什么陌生的类,还是比较好懂的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值