【转】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 ...
随机推荐
- 【LeetCode 235】Lowest Common Ancestor of a Binary Search Tree
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...
- 【加解密】关于DES加密算法的JAVA加密代码及C#解密代码
JAVA加密: package webdomain; import java.security.Key; import java.security.spec.AlgorithmParameterSpe ...
- C++ 串
♣ string 的基类basic_string中没有虚函数,它无意成为基类.更像是为了处理字符相关的问题而专门提供的一个工具及操作方法.如:想要在一个字符串str1中查找str2,没必要每次都去写K ...
- WCF寄宿方式
WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者 ...
- Redis批量导入数据
首先准备数据文件 格式为 SET Key0 Value0 SET Key1 Value1 ... SET KeyN ValueN 利用shell转换数据 #!/bin/bash while read ...
- Java执行groovy脚本
Binding binding = new Binding(); binding.setVariable("foo", new Integer(2)); GroovyShell s ...
- 【数据结构与算法分析——C语言描述】第二章总结 算法分析
算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ ...
- 隐藏StatusBar 非setStatusBarHidden
UIWindow * window = [[UIApplication sharedApplication].windows lastObject]; 隐藏 [window setWindowLeve ...
- 从数列1,2,3.......n 中 随意取几个数,使其和等于 m
//从数列1,2,3.......n 中 随意取几个数,使其和等于 m public static void Print(int n, int m, List<int> ...
- 2款好用的Web在线编辑器
1.CKEditor FCKEditor 现在已经重新开发,并改名为 CKEditor. CKeditor是一个专门使用在网页上,开放源代码,高度可定制,跨平台的所见即所得文字编辑器,兼容于绝大部分的 ...