目标:
新建一个 lesson5 项目,在其中编写代码。
代码的入口是 app.js,当调用 node app.js 时,它会输出 CNode(https://cnodejs.org/ ) 社区首页的所有主题的标题,链接和第一条评论,以 json 的格式。
注意:与之前不同的是,并发连接数需要控制在 5 个。
知识点:
1. 学习 async(https://github.com/caolan/async )
的使用。
2. 学习使用 async 来控制并发连接数。
在上一节中的eventproxy控制并发中,代码并不完美,因为我们一次性发出了40个并发请求出去,要知道,除去CNode之外,很多网站可能会因为发出的并发数连接太多而当成是恶意请求,会将IP封掉。
在写爬虫的程序时,如果有1000个链接要去爬,那么不可能同时发出1000个并发链接出去,需要控制一下并发的数量,比如并发10个就好,然后慢慢爬完这1000个链接,用async来做这件事就很简单。
但是有一个问题是什么时候使用eventproxy,什么时候使用async?它们都是用来做异步流程控制的
一般来说当你需要去多个源(一般是小于 10 个)汇总数据的时候,用 eventproxy 方便;当你需要用到队列,需要控制并发数,或者你喜欢函数式编程思维时,使用 async。大部分场景是前者,所以我个人大部分时间是用 eventproxy 的。
首先,我们伪造一个 fetchUrl(url, callback)
函数,这个函数的作用就是,当你通过
fetchUrl('http://www.baidu.com', function (err, content)</