从PHP交出一份工作(抓图像)到Node.js是否可以接受?

时间:2014-01-13 08:30:40

标签: php node.js sockets

我正在开展一个项目,我正在为一个页面获取一个URL并找到一个代表该页面的图像。查看元数据后,我查看页面内容并开始抓取页面。这是一个PHP项目。

使用PHP,getimagesize()函数有一个很长的超时时间,如果页面上有很多图像,那么它就会变得很慢。

我选择的解决方案有点奇怪,但非常快。我希望看看是否有更好的解决方案,或者我的解决方案是否有任何明显的问题。

---开始解决方案---

在PHP中,构建一个图像URL数组。连接到由Node.js处理的套接字,并将URL数组传递给Node.js处理程序。同时,在PHP端进行阻塞读取,等待响应。

在Node.js中,我使用'imagesize'模块从URL获取图像的图像大小/类型。完成所有作业后,将最大图像的URL写入套接字。在关闭套接字之前,任何错误也会写入套接字。这是一个带有'forever'模块的守护进程。

PHP端从套接字读取后解除阻塞。

---结束解决方案---

这是解决此问题的可接受方式吗?它起作用,在一些形式不佳的blogspot页面上,我看到了10倍的性能提升。我知道PHP中有一些线程解决方案,但我担心某些页面的线程数量很多。

更新

要求是提供即时反馈,因此cron作业或队列不符合要求。

1 个答案:

答案 0 :(得分:0)

如果您看到性能改进,那么解决您的问题是可以接受的。我建议尝试使用shell_exec函数来运行node.js进程。您可以将url作为命令行参数传递,您可以使用process.argv访问这些参数,这样您就不需要让node.js进程始终运行。仅在需要时通过php运行它。