WEB开发网
开发学院软件开发C语言 适合C# Actor的消息执行方式(5):一个简单的网络... 阅读

适合C# Actor的消息执行方式(5):一个简单的网络爬虫

 2010-09-30 20:50:14 来源:WEB开发网   
核心提示: 如果已经没有需要抓取的内容了,则直接抛弃Crawler对象即可,适合C# Actor的消息执行方式(5):一个简单的网络爬虫(5),否则则分派一个新任务,接着便不断创建新的爬虫,也就是启动了两个抓取任务,一是使用5个爬虫抓取cnblogs.com,分配新的抓取任务,直到爬虫数额用满

如果已经没有需要抓取的内容了,则直接抛弃Crawler对象即可,否则则分派一个新任务。接着便不断创建新的爬虫,分配新的抓取任务,直到爬虫数额用满,或者没有需要抓取的内容位置。

使用

我们使用区区几十行代码遍实现了一个简单的多线程爬虫,其中一个关键便是使用了Actor模型。使用Actor模型,对象之间通过消息传递进行交互。而且对于单个Actor对象来说,消息的执行完全是线程安全的。因此,我们只要作用最直接的逻辑便可以完成整个实现,从而回避了内存共享的并行模式中所使用的互斥体、锁等各类组件。

不过有没有发现,我们没有一个入口可以“开启”一个抓取任务啊,Monitor类中还缺少了点什么。好吧,那么我们补上一个Start方法:

public class Monitor : Actor<Action<ICrawlResponseHandler>>, ICrawlResponseHandler 
{ 
  ... 
 
  public void Start(string url) 
  { 
    this.m_allUrls.Add(url); 
    this.WorkingCrawlerCount++; 
    new Crawler().Post(c => c.Crawl(this, url)); 
  } 
} 

于是,我们便可以这样打开一个或多个抓取任务:

static class Program 
{ 
  static void Main(string[] args) 
  { 
    new Monitor(5).Start("http://www.cnblogs.com/"); 
    new Monitor(10).Start("http://www.csdn.net/"); 
 
    Console.ReadLine(); 
  } 
} 

这里我们新建两个工作单元,也就是启动了两个抓取任务。一是使用5个爬虫抓取cnblogs.com,二是使用10个爬虫抓取csdn.net。

上一页  1 2 3 4 5 6  下一页

Tags:适合 Actor 消息

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接