An open API service indexing awesome lists of open source software.

https://github.com/ykforerlang/simplecrawler

基于JUC的多线程网页爬虫
https://github.com/ykforerlang/simplecrawler

Last synced: 2 months ago
JSON representation

基于JUC的多线程网页爬虫

Awesome Lists containing this project

README

        

# webcrawler
通用网页爬虫

默认情况下 一个队列一个消费者分发线程

pro 1 --------------------------------------consumer 1 (也可以产生task给queue)
|
pro 2 ---->[可以加一层set过滤重复]----> queue --->taskControl consumer 2 (dao /jdbc)

pro 3 consumer 3 (redis/memchached)
.... .....

1. queue 可以是:LinkedBlockingQueue , ArrayBlockingQueue, SynchronousQueue(推荐), PrioriyBlockingQueue(如果网页处理有优先级)

2. taskControl 内部维护一个hashmap (key : taskType, value : solve method) , 运行时生成这个hashmap, key 由生成的任务时指定, value 由@TaskSolving 扫描而得

3. @TaskSubmiter 标志一个生产者方法,返回值必须是task/或者List??。 返回值也可以是null。 ps代码中显示的调用了addTask(),则不需要此注解

4. @TaskSolving 标志一消费者个方法, value表明这个方法所处理的任务类型,必须且唯一, 用来初始化 taskcontrol的map

5. 一个方法有可能即是 producer, 又是handle
@TaskSubmiter
@TaskSolving(value = "value")
public void f() {
dosomething();
}

6.Task 具有一个标示的type, 还有一个数据(object 类型, 任何数据都可以用object 表示)

8.consumer1 网页消费队列(无界), 处理线程可以多一些, consumer2 jdbc可以较小一下, consumer3 很少。 所以消费者的线程池的队列都是无界的。
这样不管 queue是有界还是无界的都不会出现死锁


Version:
2.0 : 1.新的task提交, 主要增加了包:com.webcrawler.tasknew下的类 , svn版本为9060, 9061

2.5.0 : 1新增ConfigurableWebCrawler

2.5.11 : 修改MyHttpClient 的构造函数