欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Heritrix源碼分析(十二) Heritrix的控制中心(大腦)CrawlContro...

Heritrix源碼分析(十二) Heritrix的控制中心(大腦)CrawlController(一)

文章分類(lèi):互聯(lián)網(wǎng)

      本博客屬原創(chuàng )文章,歡迎轉載!轉載請務(wù)必注明出處:http://guoyunsky.javaeye.com/blog/650694 

      歡迎加入Heritrix群(QQ):10447185 

 

      CrawlController的確是Heritrix的大腦,在Heritrix中擁有無(wú)上的權利!可以控制Heritrix的啟動(dòng)、暫停、停止,也定時(shí)進(jìn)行數據統計、數據匯報和文件管理。同時(shí)CrawlController也基本上貫穿整個(gè)Heritrix代碼,和CrawlURI一樣。同時(shí)CrawlController純代碼頁(yè)進(jìn)2000行,下面就先介紹里面的屬性和主要方法,同時(shí)對一些靈活用法也加以介紹:

         1.屬性:

Java代碼
  1. //狀態(tài),Checkpoinging:表示正在備份   
  2. private static final Object CHECKPOINTING = "CHECKPOINTING".intern();   
  3. //狀態(tài),FINISHED:表示抓取結束   
  4. private static final Object FINISHED = "FINISHED".intern();   
  5. //狀態(tài),NASCENT:表示正在生成一個(gè)JOB   
  6. private static final Object NASCENT = "NASCENT".intern();   
  7. //狀態(tài),PAUSED:表示暫停結束,該狀態(tài)Heritrix正暫停任何抓取   
  8. private static final Object PAUSED = "PAUSED".intern();   
  9. //狀態(tài),PAUSING:表示正在暫停,傳達一個(gè)暫停命令到每一個(gè)線(xiàn)程暫停中間需要時(shí)間   
  10. private static final Object PAUSING = "PAUSING".intern();   
  11. //狀態(tài),PREPARING:表示抓取結束   
  12. private static final Object PREPARING = "PREPARING".intern();   
  13. //狀態(tài),RUNNING:表示正在運行   
  14. private static final Object RUNNING = "RUNNING".intern();   
  15. //狀態(tài),STARTED:表示已經(jīng)啟動(dòng)   
  16. private static final Object STARTED = "STARTED".intern();   
  17. //狀態(tài),STOPPING:表示正在停止,傳達一個(gè)停止命令到每一個(gè)線(xiàn)程暫停中間需要時(shí)間   
  18. private static final Object STOPPING = "STOPPING".intern();   
  19.   
  20. //當前類(lèi)的日志管理器   
  21. private final static Logger LOGGER = Logger.getLogger(CrawlController.class  
  22.         .getName());   
  23. // 活動(dòng)的日志文件名后綴    
  24. public static final String CURRENT_LOG_SUFFIX = ".log";   
  25.   
  26. // 日志crawl.log.txt的文件名   
  27. private static final String LOGNAME_CRAWL = "crawl";   
  28. // 日志local-errors.log.txt的文件名   
  29. private static final String LOGNAME_LOCAL_ERRORS = "local-errors";   
  30. // 日志progress-statistics.log.txt的文件名   
  31. private static final String LOGNAME_PROGRESS_STATISTICS = "progress-statistics";   
  32. // runtime-errors.txt的文件名   
  33. private static final String LOGNAME_RUNTIME_ERRORS = "runtime-errors";   
  34. // 日志uri-errors.txt的文件名   
  35. private static final String LOGNAME_URI_ERRORS = "uri-errors";   
  36.   
  37. // 日志manifest-report的文件名前綴   
  38. public final static String MANIFEST_REPORT = "manifest";   
  39. //processors-report.txt的文件名前綴   
  40. public final static String PROCESSORS_REPORT = "processors";   
  41.   
  42. // crawl-manifest日志文件中中配置文件標簽縮寫(xiě)    
  43. public static final char MANIFEST_CONFIG_FILE = 'C';   
  44. // crawl-manifest日志文件中中日志文件標簽縮寫(xiě)    
  45. public static final char MANIFEST_LOG_FILE = 'L';   
  46. // crawl-manifest日志文件中中報告文件標簽縮寫(xiě)    
  47. public static final char MANIFEST_REPORT_FILE = 'R';   
  48.   
  49. //報告文件名數組   
  50. protected final static String[] REPORTS = { PROCESSORS_REPORT,   
  51.         MANIFEST_REPORT };   
  52. //應急內存,當內存不夠時(shí)Heritrix會(huì )釋放這個(gè)內存去做一些緊急動(dòng)作如數據備份   
  53. private static final int RESERVE_BLOCK_SIZE = 6 * 2 ^ 20// 6MB   
  54. private static final int RESERVE_BLOCKS = 1;   
  55.        
  56. //BDB數據庫,Heritrix自己封裝   
  57. private transient EnhancedEnvironment bdbEnvironment = null;   
  58. //用于Checkpoint備份,存儲需要備份的數據   
  59. private transient Map<String, CachedBdbMap<?, ?>> bigmaps = null;   
  60. //備份器   
  61. private Checkpointer checkpointer;   
  62. //備份對象   
  63. private transient Checkpoint checkpointRecover = null;   
  64.   
  65. //備份目錄   
  66. private transient File checkpointsDisk;   
  67. //整個(gè)Heritrix目錄   
  68. private transient File disk;   
  69. //日志文件目錄   
  70. private transient File logsDisk;    
  71. //scratch文件   
  72. private transient File scratchDisk;   
  73. //BDB數據庫文件   
  74. private transient File stateDisk;   
  75.   
  76. //日志處理器跟文件處理器關(guān)聯(lián)   
  77. transient private Map<Logger, FileHandler> fileHandlers;   
  78. //調度器   
  79. private transient Frontier frontier;   
  80.   
  81. // 日志處理器,關(guān)聯(lián)local-errors.log   
  82. public transient Logger localErrors;   
  83. // 日志處理器,關(guān)聯(lián) progress-statistics.log   
  84. private transient Logger progressStats;   
  85. //日志處理器,關(guān)聯(lián)報告文件   
  86. public transient Logger reports;   
  87. // 日志處理器,關(guān)聯(lián)runtime-errors.log   
  88. public transient Logger runtimeErrors;   
  89. // 日志處理器,關(guān)聯(lián)uri-Errors.log   
  90. public transient Logger uriErrors;   
  91. // 日志處理器,關(guān)聯(lián)crawl.log   
  92. public transient Logger uriProcessing;    
  93.   
  94. //記錄Hertrix創(chuàng )建的日志文件名   
  95. private StringBuffer manifest;   
  96.   
  97. //最大字節數,來(lái)源于配置文件   
  98. private long maxBytes; //    
  99. //抓取限制, 最大文檔數,來(lái)源于配置文件   
  100. private long maxDocument;   
  101. // 抓取限制,最大時(shí)間,來(lái)源于配置文件   
  102. private long maxTime;    
  103. //管理order.xml   
  104. private transient CrawlOrder order;   
  105. //處理器鏈   
  106. private transient ProcessorChainList processorChains;   
  107.   
  108. //事件監聽(tīng)器,比如正在運行、停止   
  109. private transient List<CrawlStatusListener> registeredCrawlStatusListeners = Collections   
  110.         .synchronizedList(new ArrayList<CrawlStatusListener>());   
  111. //抓取狀態(tài)監聽(tīng)器,這里監聽(tīng)哪些URl被忽略,哪些URL抓取失敗等   
  112. private transient CrawlURIDispositionListener registeredCrawlURIDispositionListener;   
  113.   
  114. //抓取狀態(tài)監聽(tīng)器數據   
  115. protected transient ArrayList<CrawlURIDispositionListener> registeredCrawlURIDispositionListeners;   
  116.   
  117. // 應急儲備內存   
  118. private transient LinkedList<char[]> reserveMemory;   
  119.   
  120. //抓取范圍管理   
  121. private transient CrawlScope scope;   
  122.   
  123. // CrawlServer和CrawlHost的緩存   
  124. private transient ServerCache serverCache;    
  125.   
  126. //配置文件,如order.xml   
  127. private transient SettingsHandler settingsHandler;   
  128. //Heritrix狀態(tài),表示已經(jīng)存在   
  129. private transient String sExit;   
  130.   
  131. // 鎖,控制同時(shí)只能一個(gè)線(xiàn)程運行使用本類(lèi)   
  132. private transient ReentrantLock singleThreadLock = null;   
  133.   
  134. //是否是單線(xiàn)程模式   
  135. private volatile transient boolean singleThreadMode = false;   
  136. // 表示當前爬蟲(chóng)狀態(tài),新生的   
  137. transient private Object state = NASCENT;    
  138.   
  139. // 統計跟蹤器   
  140. protected StatisticsTracking statistics = null;    
  141. //線(xiàn)程池   
  142. private transient ToePool toePool;  

 

同時(shí)屬性中有三個(gè)地方需要補充下:

     1)"CHECKPOINTING".intern(); 為什么采用intern()方法?知道intern()方法的人都知道,intern在創(chuàng )建String對象時(shí)會(huì )先無(wú)內存里查看有沒(méi)有該對象,有的話(huà)直接返回,沒(méi)有則重新創(chuàng )建。而普通的new一般都是直接創(chuàng )建對象,如此在一定程序上可以節省開(kāi)銷(xiāo)

     2)transient LinkedList<char[]> reserveMemory;應急內存。Heritrix在初始化的時(shí)候會(huì )先占用一部分內存,這里是6M。當發(fā)生內存溢出的時(shí)候則釋放這部分內存,然后做一些日志、報告方面的操作

     3)private transient ReentrantLock singleThreadLock,重入鎖.大腦只能有一個(gè),所以需要用這個(gè)來(lái)保證一個(gè)大腦的存在,而不是多個(gè)。這里為什么不用單例模式來(lái)取代,而采用這種方法?我這里沒(méi)有用單例模式和這種方法進(jìn)行實(shí)驗比較,但直覺(jué)上告訴我,由于Heritrix是個(gè)多線(xiàn)程爬蟲(chóng),并且可以同時(shí)有多個(gè)抓取Job,但同時(shí)只能有一個(gè)job運行。單例模式的synchronized不能保證當一個(gè)job發(fā)生線(xiàn)程中斷時(shí),其他job可以獲得CrawlController的鎖來(lái)運行他們的抓取,因為synchronized會(huì )一直鎖住CrawlController對象.而使用ReentrantLock則可以做到這一點(diǎn)...我的想法,歡迎大家拍磚...

 

 由于貼上方法介紹后本文章會(huì )太長(cháng),故方法介紹方法下一篇博客介紹,博客地址:http://guoyunsky.javaeye.com/blog/650744

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java之通過(guò)Collections.synchronizedMap創(chuàng )建線(xiàn)程安全的HashMap
我的SQL解析器中的用到的正則表達式
private static final long serialVersionUID的作用
serialVersionUID是什么?
layUi
設計模式-單例模式code
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久