我很新,只是了解node.js(作为PHP开发人员的背景)。我在nodejs网站上看过一些nodeJs的例子和视频。
目前我正在运行一个视频网站,在后台需要执行很多任务。目前这是由调用php脚本的cronjobs完成的。这种方法的缩减是当前一个进程仍在工作时启动另一个进程时,您将在服务器上获得高负载等。
需要在服务器上完成的作业如下:
将来需要完成的任务
我希望能够调用一个网址,以便作业可以排队,也可以按时间安排作业,也可以不断运行。
我不知道node.js是否是遵循的路径,这就是我在这里问的原因。在节点中执行此操作有什么好处?缩小?
node.js的专业人员是什么?
感谢您的回复!
答案 0 :(得分:7)
虽然传统上用于Web /网络任务(Web服务器,IRC聊天服务器等),但当您为其提供任何类型的IO绑定(而不是CPU绑定)任务时,Node.js会发光,因为它使用完全异步IO(即所有IO都发生在主事件循环之外)。例如,Node可以轻松地保持打开许多套接字,等待每个套接字上的数据,或者非常有效地将数据流入和流出文件。
听起来你只是想找job queue;一个流行的是Resque,虽然它是为Ruby编写的,但有PHP,Node.js等版本。还有专门为PHP构建的作业队列;如果你想坚持使用PHP,谷歌搜索“PHP作业队列”会让你走得更远。
现在,使用Node.js的一个优点是,它能够非常轻松地处理大量IO。当然我只是猜测,但根据你的要求,它可能是一个很好的工具:
因此,您可能希望尝试使用Node来完成这些任务。如果您这样做,请查看Resque for Node或其他作业系统,如Kue。如果你不需要复杂的东西,建立你自己的东西也不是很难 - Redis is a good tool for this。
您可能 想要使用Node的原因有几个。如果您不熟悉JavaScript以及evented和continuation-passing style programming,Node.js可能会有一些学习曲线,因为您必须强迫自己停止同步思考。此外,如果您的程序中确实有很多繁重的非IO任务,例如分析数据,Node将不会优秀,因为这些计算将阻止主事件循环并阻止Node处理异步IO的回调等。最后,如果您已经有很多PHP或其他语言的逻辑,那么用您选择的语言找到解决方案可能会更容易和/或更快。
答案 1 :(得分:2)
我的上述答案。但是,您不一定需要一个完整服务的作业队列:您可以使用像async这样的流控制模块来并行或串行运行任务,尽可能快地执行任务或使用受控并发。 Node.js有许多强大的抓取/解析工具。这个post提到了一些;我刚刚听说过Trumpet;可能有很多选择。 Node.js在核心中有一个Stream模块,而Request使HTTP交互非常容易。 对于定时任务,最简单的方法是基本的setTimeout / setInterval。或者你可以把刮刀写成一个在cron上调用的脚本。或者使用核心中的EventEmitter模块在某些事件上触发它。等...
答案 2 :(得分:0)
不受控制的节点js并行作业数量可能会使您的服务器停滞不前。您将需要控制进程或以更好的方式将它们放入每个任务的队列中
对于这种需求,如果你知道php,我建议使用gearman并根据需要或通过小型PHP脚本添加作业