3

我还很新,刚开始了解 node.js(作为 PHP 开发人员的背景)。我在 nodejs 网站上看过一些 nodeJs 示例和视频。

目前我正在运行一个视频网站,并且在后台必须执行很多任务。目前这是由调用 php 脚本的 cronjobs 完成的。这种方法的缺点是,当前一个进程仍在工作时启动另一个进程时,您会在服务器等上获得高负载。

需要在服务器上完成的工作如下:

  • 从网站上抓取提要并将它们插入 mysql 数据库
  • 从网站获取数据(抓取)(根据要求)
  • 生成用于报告的数据。这些主要是需要执行的 mysql 查询。

未来需要完成的任务

  • 记录视频浏览量(当用户访问视频页面时)(这也将记录到 mysql 中)
  • 一般记录访问者
  • 根据搜索到的视频展示广告

我希望能够调用一个 url,以便可以将作业排队,并且还能够按时间安排作业,或者它们可以持续运行。

我不知道 node.js 是否是要遵循的路径,这就是我在这里问它的原因。在节点中这样做有什么好处?下站?

node.js 的专业人士是什么?

感谢您的回复!

4

3 回答 3

7

虽然传统上用于网络/网络任务(网络服务器、IRC 聊天服务器等),但当你给它任何类型的 IO 绑定(而不是 CPU 绑定)任务时,Node.js 会大放异彩,因为它使用完全异步的 IO(即也就是说,所有 IO 都发生在主事件循环之外)。例如,Node 可以轻松地打开许多套接字,等待每个套接字上的数据,或者非常有效地将数据流式传输到文件和从文件中流出。

听起来您真的只是在寻找工作队列;一个流行的是Resque,虽然它是为 Ruby 编写的,但也有PHPNode.js等的版本。还有专门为 PHP 构建的作业队列;如果您想坚持使用 PHP,Google 搜索“PHP 作业队列”会让您走得更远。

现在,使用 Node.js 的一个优势是它能够非常轻松地处理大量 IO。当然我只是猜测,但根据您的要求,它可能是完成这项工作的好工具:

  • 从网站抓取数据/提要 - 主要等待网络 IO
  • 将数据插入 MySQL - 主要等待网络 IO
  • 报告——同样,Node 擅长 MySQL 查询,但可能不太擅长分析数据
  • 调用 URL 来安排作业 - Node 的内置 HTTP 处理和出色的Web 库使这变得轻而易举

因此,您完全有可能尝试使用 Node 来完成这些任务。如果您这样做,请查看 Resque for Node 或其他作业系统(如Kue)。如果您不需要复杂的东西,自己构建也不是很难——Redis 是一个很好的工具

您可能不想使用 Node.js有几个原因。如果你不熟悉 JavaScript 以及事件持续传递风格的编程,Node.js 可能会有一点学习曲线,因为你必须强迫自己停止同步思考。此外,如果您的程序中确实有很多繁重的非 IO 任务,例如分析数据,Node 将不会表现出色,因为这些计算会阻塞主事件循环并阻止 Node 处理异步 IO 的回调等。最后,如果您已经有很多使用 PHP 或其他语言的逻辑,那么用您选择的语言找到解决方案可能会更容易和/或更快。

于 2012-05-26T19:19:26.203 回答
2

我支持上述答案。但是,您不一定需要提供全方位服务的作业队列:您可以使用异步等流控制模块以并行或串行方式运行任务,以尽可能快的速度或以受控的并发方式运行。Node.js 有许多强大的抓取/解析工具。这篇文章提到了一些;我最近才听说小号;可能有几十种选择。Node.js 在核心中有一个Stream模块,Request使 HTTP 交互变得非常容易。对于定时任务,最简单的方法是基本的 setTimeout/setInterval。或者您可以将刮板编写为在 cron 上调用的脚本。或者使用核心中的 EventEmitter 模块在某些事件上触发它。ETC...

于 2012-05-28T00:56:32.717 回答
0

不受控制的节点 js 并行作业数量可能会使您的服务器瘫痪。您将需要控制流程或以更好的方式将它们放入队列中以完成每个任务

对于这个需求,如果你知道 php,我建议使用 gearman 并根据需要或通过小型 php 脚本添加作业

于 2015-01-07T04:17:21.530 回答