【转】larbin主要代码说明
转自:http://blog.csdn.net/s030702614/article/details/5683928
1. 主函数:
int main (int argc, char *argv[]) {
global glob(argc,argv) //初始化变量、队列
StartThread(startWebserver,NULL) //web服务
cron() //配置初始化
for( ; ;) {
waitBandWidth(&old); //等待带宽
poll(NULL,0,10); //间隔10ms
cron();
input(); //接受数据,装载url(貌似都没有执行过)
sequencer(); //url队列调度
fetchDns(); //解析DNSSites中的dns
fetchOpen(); //爬取网页
CheckAll(); //读取数据
poll(); //间隔10ms
}
}
2. void sequencer ();
函数功能:按优先级顺序将url加入到namedSiteList
参数说明:void
返回值:队列中有url返回true,否则返回false
bool sequencer(void) {
space=putAll(); //能够装载的urls数
CanGetUrl(& testPriority); { //获得一个url,放到namedsitelist中去
if(URLPriorityWait中有url)
从中获得url加入到namedSiteList;
else if(URLPtiority中有url)
从中获得url加入到namedSiteList;
else {
if(URLDiskwait中有url)
从中获得url加入到namedSiteList;
else //URLDisk中有url
从中获得url加入到namedSiteList;
}
}
}
3. void fetchDns;
函数功能:建立socket,进行dns解析
参数说明:void
返回值:void
void fetchDns () {
while(等待解析的dns数<dns最大并行连接数&&有空闲连接&&IPUrl < maxIPUrls) {
从dnsSites获得一个url;
site->newQuery();//dns查询
} while (有dns等待解析&&有空闲连接) {// Read available answers
adns_check(global::ads, &quer, &ans, (void**)&site);
site->dnsAns(ans); // dns解析成功,申明连接空闲
}
}
函数功能:建立sockets连接(仅仅对于已经经过dns解析的站点)
参数说明:void
返回值:void
备注:工作在主线程
void fetchOpen () {
while (okSites中还有url &&有空闲的连接) {
从okSites-中获得一个url;
/** s->fetch() means :
* fetch the first page in the fifo okSites
* there must be at least one element in freeConns !!!
* return expected time for next call (0 means now is OK)
* This function always put the IPSite in fifo before returning
* (or set isInFifo to false if empty)
*/
next_call = s->fetch();//调用fetch()
}
}
5. void checkAll ()
函数功能:1、read all data available 2、fill fd_set for next select 3、give back max fds
参数说明:void
返回值:void
void checkAll () {
for (uint i=0; i<global::nb_conn; i++) {//nb_conn为并行的连接数,对于每个连接
switch(连接状态) {
case connectingC:
case writeC:
/*如果是要连接,调用getsockopt,再把状态改为writeC。如果是writeC,调用write,将状态改为openC。*/
pipeWrite(conn);
break;
case openC:
pipeRead(conn);
break;
}
} // update fd_set for the next select
/*对要将读写设为非堵塞的设置*/
for (uint i=0; i<global::nb_conn; i++) {
int n = (global::connexions+i)->socket;
switch ((global::connexions+i)->state) {
case connectingC:
case writeC:
global::setPoll(n, POLLOUT);
break;
case openC:
global::setPoll(n, POLLIN);
break;
}
}
}
【转】larbin主要代码说明的更多相关文章
- c++开源爬虫-Larbin简单介绍
原文地址:http://leihuang.net/2014/06/16/Larbin-Introduction/ 由于近期学校实训.做的是一个搜索相关的项目,而且是c++的一个项目.所以就想到了lar ...
- Larbin初试
前阵子找工作的时候经常会看到epoll多路复用的知识点,无奈自己一点都不懂.慌忙之际也只能去了解个大概.所以最近闲下来之后想要基于epoll机制实现一个比较有用的东西,刚好最近又想爬些东西,希望这次能 ...
- 爬虫Larbin解析(二)——sequencer()
分析的函数: void sequencer() //位置:larbin-2.6.3/src/fetch/sequencer.ccvoid sequencer() { bool testPriority ...
- 爬虫Larbin解析(一)——Larbin配置与使用
介绍 功能:网络爬虫 开发语言:c++ 开发者:Sébastien Ailleret(法国) 特点:只抓取网页,高效(一个简单的larbin的爬虫可以每天获取500万的网页) 安装 安装平台:Ubun ...
- ROBOTS.TXT屏蔽笔记、代码、示例大全
自己网站的ROBOTS.TXT屏蔽的记录,以及一些代码和示例: 屏蔽后台目录,为了安全,做双层管理后台目录/a/xxxx/,蜘蛛屏蔽/a/,既不透露后台路径,也屏蔽蜘蛛爬后台目录 缓存,阻止蜘蛛爬静态 ...
- larbin是一种开源的网络爬虫/网络蜘
larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发.larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源.Lar ...
- larbin之哈希之谈
由于工作原因,打算对larbin的源码进行分析一番 用的是2.6.3版本的larbin源码,由于这是业余,会断断续续的分析上传,已做记录笔记 今天我们分析一下larbin的哈希表 这个哈希表结构比较简 ...
- 日期格式代码出现两次的错误 ORA-01810
错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
随机推荐
- Yii 实现MySQL多库和读写分离
前段时间为SNS产品做了架构设计,在程序框架方面做了不少相关的压力测试,最终选定了YiiFramework,至于为什么没选用公司内部的PHP框架,其实理由很充分,公司的框架虽然是“前辈”们辛苦的积累, ...
- 字符串中符号的替换---replace的用法
#include<iostream> #include<string> using namespace std; int main() { string s1 = " ...
- 读取raw目录中的文件数据
try { InputStream is2 = getResources().openRawResource(R.raw.info); InputStreamReader isr2 = new Inp ...
- Linux基本命令 目录
Linux基本命令 目录 Linux基本命令(1)管理文件和目录的命令 Linux基本命令(2)有关磁盘控件的命令 Linux基本命令(3)文件备份和压缩的命令 Linux基本命令(4)有关关机和查看 ...
- SSD Cloud Hosting - Linode的配置和部署,搭建Java环境
0.发牢骚 前一个月在淘宝购买了个Jsp空间,挺便宜的,才38元/年.部署了程序,然后ALIMAMA验证网站,一直提示验证失败.最后找卖家,他说可能是因为空间太慢,照他的推荐换了最好的空间,138元/ ...
- hive 面试题 转载
转自:http://blog.csdn.net/ningguixin/article/details/12852051 有一张很大的表:TRLOG该表大概有2T左右TRLOG:CREATE TABLE ...
- sqoop 初用
http://blog.csdn.net/dbanote/article/details/8907650 目前版本的Sqoop中,使用自由形式查询导入,只提供简单的查询,没有复杂的和“OR”条件查询在 ...
- js中ajax如何解决跨域请求
js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程08:虚拟键盘实现》--本系列完结
8.虚拟键盘实现 概述: 硬键盘就是物理键盘,平时敲的那种.软键盘是虚拟的键盘,不是在键盘上,而是在"屏幕"上.虚拟按键就是虚拟键盘的一部分,根据功能需求,提供部分按键效果的UI可 ...
- 基于mapreduce的大规模连通图寻找算法
基于mapreduce的大规模连通图寻找算法 当我们想要知道哪些账号是一个人的时候往往可以通过业务得到两个账号之间有联系,但是这种联系如何传播呢? 问题 已知每个账号之间的联系 如: A B B C ...