List
sXJomainSpiderRunnerList:
List
InstanceManager
SnstanceCreate(className:
String):
voidinstanceRemove(className:
String):
booleanStopAII(className:
String):
boolean
InstanceRemover
^InstanceRemoverO
o
Runnable
(fromLogicalView)
*run()
InstanceCreator
NnstanceCreator()
InstanceAIIRemover
NnstanceAIIRemoverO
Thread
主线松
(fromUseCast..)
3.3 模块序列
:
Thread
InstanceAIIRemover
InstanceMa门aqer
□
1.
InstanceAIIRemover(String)
2.run()
2.1.new
2.2.stopAII(String)
L—
3.4 重要类和接口描述
1.主线程
说明
功能描述
主线程组织管理业务线程的类。
通过监视控制台输入的命令,控制业务线程的活动;
主要方法描述
1.mn:
按照一定的策略生成各类业务线程,然后等待用户控制台的输入,通过命令管理业务线程的生命活动;
涉及数据
备注
1.InstanceManager
说明
功能描述
InstanceManager线程实例管理类,负责新增线程实例和删去线程实例;
主要方法描述
1.instanceCreate:
根据参数指定的类名称,实例化并把实例引用放入runnerList和threadList列表中;
2.instanceRemove:
根据参数指定的类名,停止该类的一条线程,并从runnerList和threadList删去;该方法先调用IRunner接门的stop方法,然后睡眠预定的时间,然后通过IRunner接U的isEnd()方法检测线程时候正常结束,如果未正常结束则调用Thread的stop方
法结束线程,最后从runnerList和threadList列表中删除实例引用;
3.stopAll:
根椐参数指定的类名,停止该类的所有线程,并从runnerList和threadList删去;其过程类似于instanceKemove,不同的是本方法停止并删除所有实例;
涉及数据
1.className:
参数指定的线程类名;
2.runnerList:
IRunner接口的列表;
3.threadList:
Thread列表;
备注
各个方法都应该先锁定runnerList,再锁定threadList,一定要按照这个顺序加锁,防止线程死锁;
2.InstanceCreator
说明
功能描述
InstanceCreator为指定的业务线程类增加新线程实例;
主要方法描述
InstanceCreator:
构造方法屮参数为线程类的类名;
run:
线程接口方法,调用丨nstanceManager的instanceCreate方法生成新线程;
涉及数据
className:
参数指定的线程类名;
runnerList:
IRunner接口的列表;
threadList:
Thread列表;
备注
3.InstanceRemover
说明
功能描述
InstanceRemover停止指定的线程类的一条线程;
主要方法描述
InstanceRemover:
扫描目录,读取种子文件内容;
run:
线程接口方法,调用InstanceManager的instanceReraove方法除去一条线程实例;
涉及数据
className:
参数指定的线程类名;
runnerList:
1Runner接口的列表;
threadList:
Thread列表;
备注
4.InstanceAIIRemover
说明
功能描述
InstanceAIIRemover停止指定的线程类的所有线程;
主要方法描述
1.InstanceAIIRemover:
扫描目录,读取种子文件内容;
2.run:
线程接口方法,调用丨nstanceManager的instanceRemove方法除去一条线程实例;
涉及数据
className:
参数指定的线程类名;
runnerList:
IRunner接口的列表;
threadList:
Thread列表;
备注
5.ThreadManager
说明
功能描述
ThreadManager存放各类线程的列表;
主要方法描述
涉及数据
6.1xxxRunnerList:
存放IRunner接口的线程的引用;
6.2xxxThreadList:
存放Thread类的引用;
备注
第4章生成种子子系统
4.1模块描述
本子模块是爬虫搜索的业务起点。
本模块从时间轴上看有两个阶段的任务:
一是整理种子的输入;二是把种子load到队列中。
每个任务业务上分为为网页采集服务和为二级域名采集服务两种业务。
第一个任务可描述为:
通过整理用户维护的源种子文件并持久化,形成网页采集种子;或从嗅探数据中过滤获取需要的二级域名种子并持久化,形成二级域名采集种子。
第二个任务可描述为:
通过同步机制,将持久化的种子load到内存队列屮。
如下图(图4-1)所示。
整理种/阶段
导入队列阶段
网贞采粢 二级域各采粜
种子生成 种子生成
(图4-1)生成种子模块描述图
>输入:
■网页采集种子生成子模块:
用户维护的种子链接文件;
■二级域名采集种子生成子模块:
嗅探数据;
>输出:
■网页采集种子生成子模块:
与持久化的种子同步的队列;
■二级域名采集种子生成子模块:
与持久化的种子同步的队列;
>运行时机:
1.主线程启动时;
2.用户维护的种子文件的0录有新种子文件吋;
3.配置文件指定启动为二级域名釆集种子生成模块收集种子时;
4.2模块类图
O
Runnable
O
IRunner
【相关说明】:
1.IRunner和RealRunner为线程活动控制相关类,在其他模块中亦然;
2.FileSeedReformater和DBSeedScanner通过代理模式使用
RealRunner;为业务相关类;
3.SeedDBHandle为DB接口类;
4.还需要两类把种子自动装载到
DownloadQueue/DomainDownloadQueue白勺@矛呈;
2.4.模块序列图
整理种子阶段:
•
•
礬
•
\
InstanceCreator
DBSeedScanner
RealRunner
SeedDBHandle
1.InstanceCreator(String)
:
主线程
2.run()
添加到ThreadManager
相设列表中
2.2.run()
^3.1.read()
< 2.3.2.scan()
2.3.3.filter()
2.3.start()
2.3.1.start()
2.3.4.import()
【相关说明】:
4.4重要类和接口描述
AbstractSeedProcessor
说明
功能描述
AbstractSeedProcessor处理种子的超类;通过Proxy模式;使用RealRunner来实现IRunner接口,IRunner接口是其生命活动控制的接口,另实现Runnable使其可以具有线程生命;
主要方法描述
1.read:
抽象方法,该方法在子类实现时,分为读文件和读数据库两种数据来源;
涉及数据
备注
该类未实现Runnable的run方法;
FileSeedReformater类:
说明
功能描述
HIcSeedRcformater是处理用户输入的种子数据,格式化后写入DB;继承了AbstractSeedProcessor,而AbstractSeedProcessor帮它实现了TRunner接口的所有方法,另该类实现Runnable使其可以具有线程生命;
主要方法描述
5.1read:
overwrite了AbstractSeedProcessor的方法;妇描0录,读取种子文件内容;
5.2run:
线程接口方法,调用read、backup和SeedDBHandle的import方法;
5.3backup:
private方法,务份处理完成的种子文件,并删除当前种子文件;
涉及数据
1.seedFileDir:
种子文件目录;
2.seeds:
种子,表映射类;
备注
DBSeedScanner
说明
功能描述
DBSeedScarmer是处理嗅探数裾来源的种子数据,格式化后写入DB;继承了AbstractSeedProcessor,而AbstractSeedProcessor帮它实现了IRunner接口的所有方法,另实现Runnable使其可以具有线程生命;
主要方法描述
1.filter:
过墟嗅探数掘,将二级域名的数掘过波出来;
2.read:
实现了AbstractSeedProcessor的方法;根据配S的策略,调用SeedDBHandle的scan方法读取数据库中的二级域名的信息作为种子;
3.run:
线程接口方法,调用filter和SeedDBHandle的scan、import方法;
涉及数据
1.gnAppData:
嗅探数据,表映射类
2.seeds:
种子,表映射类;
备注
SeedDBHandle
说明
功能描述
SeedDBHandle是DB接口类,按照Seed的格式写入DB;
主要方法描述
1.scan:
扫描嗅探数据,将二级域名的数据扫描出來;
import:
根据Seed数据格式,写入DB;
loadSeeds,deleteSeed,updateSeed,addSeed:
增删改种子和load所有种子;
getMaxOrder,getMinOrder:
取得种子的最大顺序值和最小顺序值;
涉及数据
1.seeds:
种子,表映射类;
备注
第5章网页数据采集子系统
1.Http访问组件模块
2.模块描述
本模块负责http连接和获取http头信息。
业务逻辑为:
从网页采集种子队列中读取种子,然后通过httpCIient连接外部wap/网络,并把http头信息保存到HttpHeader屮,最后封装httpHeader,连接资源的引用等信息存入HeaderQueue中。
>输入:
网页采集种子;
>输出:
封装的HttpHeader和连接资源;
>运行时机:
7.主线程启动该业务线程后;
8.iL种子队列中有待访问种子;
9..目.HeaderQueue未超过警戒长度;
5.1.2模块类
o
Runnable
(fromLogic...)
I*run()
o
Runner
(fromLogicalView)
•isSt