https://github.com/ykforerlang/simplecrawler
基于JUC的多线程网页爬虫
https://github.com/ykforerlang/simplecrawler
Last synced: 2 months ago
JSON representation
基于JUC的多线程网页爬虫
- Host: GitHub
- URL: https://github.com/ykforerlang/simplecrawler
- Owner: ykforerlang
- Created: 2017-03-29T00:11:05.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2022-06-17T01:50:29.000Z (almost 3 years ago)
- Last Synced: 2025-01-28T19:24:09.990Z (4 months ago)
- Language: Java
- Homepage:
- Size: 38.1 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
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, 90612.5.0 : 1新增ConfigurableWebCrawler
2.5.11 : 修改MyHttpClient 的构造函数