提供Web服务的机器,能够处理的未完成的TCP连接数有一个上限,未完成的TCP连接请求放在一个预备队列,这个队列有一个预先定义的数量限制,它规定在任何时刻能够处理的请求数目。当一个服务器的预备队列达到它定义的限制时,任何新的连接请求都会被忽略,直到队列可用为止。
多道搜集程序并行的工作,如果没有控制,势必造成对于搜集站点的类似于DoS攻击的副作用,也就是塞满了Web服务器的预备队列,导致后续请求被忽略。
因此在TSE的Crawl.cpp中增加一段控制代码。
其中NUM_WORKERS_ON_A_SITE,定义在文件Tse.h中,为const unsigned int NUM_WORKERS = 2,表示一个站点同一时刻最多有2个gatherer在搜集它的网页。代码的实现是根据待放入URL的主机部分,判断待访问队列中是否已经有足够数目的包含该主机的URL,如果是则等待,直到有空缺才插入待访问队列。空缺的产生是因为gatherer程序下载了该URL,并从待访问队列删除了该URL。

"控制对一个站点并发搜集线程的数目"的1条 评论
我来说两句!