zoukankan      html  css  js  c++  java
  • 【转】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解析成功,申明连接空闲
           }
    }
    
     
    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;
            }
        }
    }        
    
  • 相关阅读:
    学习java之路2
    学习java之路1
    【JavaSE】如何安装jdk以及java的环境配置(超详细) eclipse的安装和简单使用
    微课堂的使用体验
    Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    docker概念
    Leetcode103_Binary-tree-zigzag-level-order-traversal
    二叉树广度优先遍历和深度优先遍历
    centos7 安装docker
    yum update 出错
  • 原文地址:https://www.cnblogs.com/sunada2005/p/3196043.html
Copyright © 2011-2022 走看看