转自: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解析成功,申明连接空闲
}
}
 
4. void fetchOpen ();

函数功能:建立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主要代码说明的更多相关文章

  1. c++开源爬虫-Larbin简单介绍

    原文地址:http://leihuang.net/2014/06/16/Larbin-Introduction/ 由于近期学校实训.做的是一个搜索相关的项目,而且是c++的一个项目.所以就想到了lar ...

  2. Larbin初试

    前阵子找工作的时候经常会看到epoll多路复用的知识点,无奈自己一点都不懂.慌忙之际也只能去了解个大概.所以最近闲下来之后想要基于epoll机制实现一个比较有用的东西,刚好最近又想爬些东西,希望这次能 ...

  3. 爬虫Larbin解析(二)——sequencer()

    分析的函数: void sequencer() //位置:larbin-2.6.3/src/fetch/sequencer.ccvoid sequencer() { bool testPriority ...

  4. 爬虫Larbin解析(一)——Larbin配置与使用

    介绍 功能:网络爬虫 开发语言:c++ 开发者:Sébastien Ailleret(法国) 特点:只抓取网页,高效(一个简单的larbin的爬虫可以每天获取500万的网页) 安装 安装平台:Ubun ...

  5. ROBOTS.TXT屏蔽笔记、代码、示例大全

    自己网站的ROBOTS.TXT屏蔽的记录,以及一些代码和示例: 屏蔽后台目录,为了安全,做双层管理后台目录/a/xxxx/,蜘蛛屏蔽/a/,既不透露后台路径,也屏蔽蜘蛛爬后台目录 缓存,阻止蜘蛛爬静态 ...

  6. larbin是一种开源的网络爬虫/网络蜘

    larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发.larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源.Lar ...

  7. larbin之哈希之谈

    由于工作原因,打算对larbin的源码进行分析一番 用的是2.6.3版本的larbin源码,由于这是业余,会断断续续的分析上传,已做记录笔记 今天我们分析一下larbin的哈希表 这个哈希表结构比较简 ...

  8. 日期格式代码出现两次的错误 ORA-01810

    错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...

  9. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

随机推荐

  1. 关于“怎么比较两个SQL查询语句产生的结果集是否相同”搜集到的一些资料

    一. 如果你这两个结果集都没有close,可以这样: rs.last(); rs2.last(); if (rs.getRow() != rs2.getRow()) { //记录数不等,即结果不等 } ...

  2. Ubuntu 安装

    最近又有工作需要,又需要在虚拟机上工作了.记得上次使用Ubuntu的时候还是7,8年前呢 用的是vmware 7 ,buntu的版本记不清了.时隔多年又捡起来了,记忆还停留在过去,于是被折腾惨了. 1 ...

  3. C++ STL疑惑知识点

    1.remove的问题 用法参考:http://www.cnblogs.com/heyonggang/p/3263568.html

  4. cefSharp在XP下使得程序崩溃记录

    前言:这是一个奇葩的问题,到现在自己还没有搞明白问题出现在哪里,但是从问题总算是解决了,希望看到此文章的大牛,如果知道问题出在什么地方,可以告知一下. [一个在XP系统下面应用程序崩溃问题] 资源: ...

  5. Javascript实现局部刷新

    <div id="altContent">           要刷新的区域000000</div><input type="button& ...

  6. 【调试】DLL EXE 调试技巧

    0.随便说点 最近因为一些原因一直都没有更新博客,从今天开始要逐渐恢复了,也是对自己的鞭策. 1.本文目标 本文要说在有DLL 和 EXE源码的情况下调试DLL 和 EXE, 工具是VC++2010, ...

  7. WCF寄宿方式

    WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者 ...

  8. centos 7搭建vpn(pptpd)服务器 (只限centos 7)

    第一步:首先检查ppp是否开启  若使用XEN构架的VPS,此步骤不用执行 终端输入命令:cat /dev/ppp 开启成功的标志:No such file or directory 或者 No su ...

  9. Jquery 等待ajax返回数据loading控件ShowLoading组件

    1.意义 开发项目中,前台的页面要发请求到服务器,服务器响应请求返回数据到前台,这段时间,有可能因为返回的数据量较大导致前台页面出现短暂性的等待,此时如果用户因不知情而乱点击有可能造成逻辑混乱,所以此 ...

  10. 转】Eclipse在线安装SVN

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4354199.html 感谢! 对于,搞大数据的博主我,svn是需要了解的,很多源码包! 一.SVN在线安装 下面 ...