管理使用spawn生成的节点子进程

时间:2018-03-11 17:09:15

标签: node.js amazon-s3 phantomjs fork spawn

我已经构建了一个获取URL截图的服务。我使用Node和Phantom JS构建了它。

我的节点应用程序的工作原理如下:

  1. 一个简单的应用程序,它接收API请求以指示要加载的网址并截取
  2. 的屏幕截图
  3. 该应用程序生成一个子幻影进程,该进程获取屏幕截图并将其保存到服务器上的临时文件中
  4. 主进程将图像上传到S3
  5. 主要流程会将API请求重新发送回初始网站,说明图片是使用图片的网址上传的
  6. 删除临时文件
  7. 如何运作的图表 enter image description here

    这适用于单个请求,没问题。但是,当我在此服务中抛出多个连续请求时,我得到了奇怪的结果。服务收到的每个请求都会生成一个Phantom JS进程并进行屏幕截图,但发送回主网站的API请求中的数据通常不正确。系统会定期从另一个子进程创建的屏幕截图中发回图像URL。

    我的预感是,当生成的进程退出时,它会将API请求发送到原始网站,其中包含刚收到的任何数据,而不是刚刚完成的流程数据。

    我觉得这应该是一件容易管理的事情,但我还没有找到正确的方法。有没有人有任何提示/技巧来管理使用spawn创建的子进程,特别是当它们退出时。我想基于这个退出的过程执行另一项任务。

    我最初的想法是保留子进程PID的数组以及我拥有的相关数据,并在子进程退出时在此数组中进行查找。这似乎没有解决问题 - 我仍然有不正确的数据被发送回主网站。我想知道我是否正确实现了这一点。我在服务收到的每个API请求上定义了数组,所以考虑一下,它会在每个请求上重新创建......我想。

    另一个想法是我应该使用fork而不是spawn。我认为这将允许我与子进程通信,但据我所知,我只能使用它来运行JS文件,而不是像Phantom这样的可执行文件。这是对的吗?

    我觉得有点像我在这一点上重新发明轮子,但任何提示都会非常感激,谢谢。

0 个答案:

没有答案