• 深入学习Heritrix解析Frontier(链接工厂)


    Frontier是Heritrix最核心的组成部分之一,也是最复杂的组成部分.它主要功能是为处理链接的线程提供URL,并负责链接处理完成后的一些后续调度操作.并且为了提高效率,它在内部使用了Berkeley DB.本节将对它的内部机理进行详细解剖.

    在Heritrix的官方文档上有一个Frontier的例子,虽然很简单,但是它却解释Frontier实现的基本原理.在这里就不讨论,有兴趣的读者可以参考相应文档.但是不得不提它的三个核心方法:
    (1)next(int timeout):为处理线程提供一个链接.Heritrix的所有处理线程(ToeThread)都是通过调用该方法获取链接的.

    (2)schedule(CandidateURI caURI):调度待处理的链接.

    (3)finished(CrawlURI cURI):完成一个已处理的链接.

    整体结构如下:

    BdbMultipleWorkQueues:

    它是对Berkeley DB的简单封装.在内部有一个Berkeley Database,存放所有待处理的链接.

    Code

     BdbWorkQueue:

    代表一个链接队列,该队列中所有的链接都具有相同的键值.它实际上是通过调用BdbMultipleWorkQueues的get方法从等处理链接数据库中取得一个链接的.

    Code

     WorkQueueFrontier:

    实现了最核心的三个方法.

    Code

    BdbFrontier:

    继承了WorkQueueFrontier,是Heritrix唯一个具有实际意义的链接工厂.

    Code

    BdbUriUniqFilter:
    实际上是一个过滤器,它用来检查一个要进入等待队列的链接是否已经被抓取过.

    Code


  • 相关阅读:
    拓展欧几里得
    使用BIOS进行键盘输入和磁盘读写
    直接定址表
    指令系统总结
    端口
    内中断
    标志寄存器
    call 和 ret 指令
    编写包含多个功能子程序的中断例程
    字符串的输入
  • 原文地址:https://www.cnblogs.com/hustcat/p/1318203.html
Copyright © 2020-2023  润新知