web-crawler - 使用 php 在 Storm 中进行非阻塞 HTTP 调用

标签 web-crawler nonblocking apache-storm

我正在评估使用 Storm(实时框架,而不是 IDE)构建一个网络爬虫。我的 Spout 将传递一个 URI 流,必须在第一个 Bolt 中调用和检索,这是用 php 编写的。

来自 node.js 背景,我知道可以使用回调以非阻塞方式构建这样的功能。我幼稚的想法是,只为那个 Bolt 配置很多 Tasks,以便在一些 Taks 等待答案的同时充分利用资源。问题是,php 以为每个进程分配大量资源而臭名昭著,我不知道 Storm 如何在内部进行管理,以及这是否是个好主意。

在这种环境中是否可能出现类似 node.js 的行为?或者我是否必须为这个 Bolt 切换到另一种语言才能实现它(如果是,我该怎么做)?

最佳答案

我编写了一个使用 Storm 和非阻塞 HTTP 调用的网络爬虫,尽管是在 Java 中。我们一直在生产中使用它,它工作得很好。

我们有一个来自 spout 的 URL 流,它被分派(dispatch)到爬虫 bolt 。每个 bolt 将发出非阻塞 HTTP 请求,我在其上注册一个回调,该回调将向输出收集器发出结果。 IE。是的,您可以使用 Storm 进行非阻塞 IO。

我不熟悉 PHP 开发,所以我不能评论那么多,但无论你做什么,与基于 JVM 的语言相比,由于进程间消息传递,它的性能可能会很差。

注意:在最新版本的 Storm 中,输出收集器不再是线程安全的,所以当你异步发出东西时,一定要在它们上同步。

关于web-crawler - 使用 php 在 Storm 中进行非阻塞 HTTP 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9926583/

相关文章:

html - VBA Excel点击 "submit"后提取新的网页数据

javascript - Facebook 爬虫目前是否在解析 DOM 之前解释 javascript?

python - python中html解析和网页爬取有多大区别

android - Android 上的非阻塞 HTTP GET 查询

python - Apache Storm Python Bolt 中的 "No module named"错误

database - 如何存储从网站抓取的数据

php - Unix 套接字设置 O_NONBLOCK 以与 php-fpm get segmentfault 通信

objective-c - 如何检查一个对象是否被@synchronized

apache-storm - Esper 和 Apache Storm 之间的区别?

java - 我正在尝试使用 maven 安装我克隆的 apache-storm 存储库。并且在到达 Storm 客户端时收到以下错误。如何解决这个问题?