【转】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 ...
随机推荐
- shell脚本中一些特殊符号
在shell中常用的特殊符号罗列如下: # ; ;; . , / \\ 'string'| ! $ ${} $? $$ $* \"string\"* ** ...
- php获取网站根目录
php获取网站根目录方法一:<?phpdefine("WWWROOT",str_ireplace(str_replace("/","\\&quo ...
- HTML和URL比较
1.录制脚本的基本原则 2.HTML和URL based script介绍 3.选择录制方式原则 4.HTML based script设置
- php 采集程序 宋正河
本程序主要是通过php采集网页信息,程序自动存储采集进度,采用phpquery简化元素节点匹配,采集到的内容直接入库 你要做的只是写好采集语法,本程序适合有一定php基础的人使用!当然你也可以进行修改 ...
- Windows8.1 安装office2013并激活
之前笔记本上安装的东西太多了,启动比较慢,打算重做系统,正好同事有一个Windows8.1的系统盘,直接做了一个Windows8.1的系统.界面清爽,速度还可以,系统安装完成以后,准备安装office ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- 记录一下JS正则的坑
JS正则的单行模式有点问题 总之 . 符号匹配换行符号会有问题 暂时的解决方案是 html = html.replace(/[\r\n]/g,""); 附加一个 html = ht ...
- hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse
生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...
- springMVC的详细步骤配置
使用springMVC也可以代替struts2,当然只是代替业务分发的功能,struts2的一些其他功能它是没有的,不然要struts2有什么用. 下面我用springMVC代替struts2去整合h ...
- deep learning 的java库
deepLearning4j: https://github.com/deeplearning4j/libnd4j/issues/208 deepLearn ...