噩梦不会连续运行两次 - NodeJS



edit

我注意到删除了.end()功能似乎可以解决问题,但是在阅读了有关.end()使用的噩梦文档后,它说:Completes any queue operations, disconnect and close the electron process.

现在虽然这确实解决了问题,但我现在每次调用路线时都会打开越来越多的电子进程,这最终会导致服务器用尽内存,或者这是解决问题的安全方法?

原始文本

请考虑以下问题:

我正在开发基于节点的服务,该服务将允许用户请求特定URL的屏幕截图。

为此,我正在使用噩梦访问URL,等待2秒钟,屏幕截图,该屏幕截图保存到磁盘上,将其转换为base64,删除图像,然后返回base64字符串。

    console.log('Nightmare starts');
    nightmare
    .goto(url)
    .wait(2000)
    .screenshot(filename)
    .end()
    .then(function (result)
    {
      fs.exists(filename, function(exists) 
      {
          if (exists)
          {
              data = fs.readFileSync(filename);
              var base64 = data.toString('base64')
              fs.unlink(filename);
              var output = {'message':'success','map_image':base64};
              res.send(output);
          }
      });
    })
    .catch(function (error)
    {
      console.error('Search failed:', error);
    });
    console.log("Nightmare Finished");

上述代码第一次运行正常。但是,随后的任何呼叫此游戏机"噩梦开始"one_answers"噩梦都立即完成",而实际上没有运行的实际代码。我似乎没有显示任何错误,如果我将其包裹在尝试/捕获中,什么也不会抓住。该节点需要重新启动才能再次发生。

值得注意的是,我正在无头的Ubuntu机器上运行,因为电子(噩梦依赖性之一(似乎需要GUI,我使用XVFB使用以下命令来启动节点:

xvfb-run --auto-servernum --server-num=1 node server.js

我认为这可能是一个问题,某些资源在第一次运行中未正确发布,但是任何帮助都将不胜感激。

也对我的代码的任何建设性批评也开放,对节点非常新,我敢肯定我不是以最佳的方式写作(同步文件加载等(

看来,您只是在放置在创建噩梦实例的位置。没有更多代码段和信息,无济于事。

方法1

每次创建噩梦实例,完成任务后关闭它们。它将需要一些时间来启动该实例,但也会减少内存负载。更不用说您可以为不同用户有多个噩梦实例。

方式2

不要结束并重复使用同一噩梦实例。有多个噩梦实例,并排队呼吁屏幕截图。这些网站将加载快速,并且不需要时间来启动一个实例,但是您将有更长的等待时间更长的队列。

最新更新