错误:在Azure上编写ENOTSUP

时间:2017-08-02 07:44:09

标签: node.js azure express azure-web-app-service

我尝试在Azure WebApps服务中使用群集,但我收到了错误

Error: write ENOTSUP

我在源代码下面附加我的源代码是由web.config文件执行的。

const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  const cpus = os.cpus().length;

  console.log(`Forking for ${cpus} CPUs`);

  for (let i = 0; i < cpus; i++)
    cluster.fork();

  cluster.on('exit', (worker, code, signal) => {
    if (code !== '0' && !worker.exitedAfterDisconnect) {
      console.log(`Worker ${worker.id} crashed. Starting a new worker...`);
      cluster.fork();
    }
  });

  process.on('SIGUSR2', () => {
    const workers = Object.values(cluster.workers);

    const restartWorker = (workerIndex) => {
      const worker = workers[workerIndex];
      if (!worker)
        return;

      worker.on('exit', () => {
        if (!worker.exitedAfterDisconnect)
          return;
        console.log(`Exited process ${worker.process.pid}`);
        cluster.fork().on('listening', () => {
          restartWorker(workerIndex + 1);
        });
      });

      worker.disconnect();

    };

    restartWorker(0);
  });

} else {
  require('./bin/www');
}

Azure是否支持WebApps中的群集? 如果不是有什么选择?

谢谢,迈克尔。

2 个答案:

答案 0 :(得分:1)

Azure Web Apps不支持群集,因为它不支持使用命名管道。在GitHub上查看此主题:https://github.com/tjanczuk/iisnode/issues/419

您的选择是使用 Azure云服务 Azure虚拟机

答案 1 :(得分:0)

我遇到了类似的问题,在研究过程中我发现如果你想在你的节点应用程序中使用群集,你就不能使用本机节点集群。但是,如果您的计算机有多个CPU核心并且您想要进行平衡,则可以在web.config文件中添加此行。

 <iisnode watchedFiles="web.config;*.js" devErrorsEnabled="true" nodeProcessCountPerApplication="0" />
  
      
  • nodeProcessCountPerApplication。

         

    此设置控制启动的节点进程数   每个IIS应用程序。默认值为1.您可以启动任意数量   node.exes作为您的VM vCPU计数,方法是将其设置为0.建议使用   对于大多数应用程序,值为0,因此您可以使用所有vCPU   你的机器。 Node.exe是单线程的,因此一个node.exe占用了一个   最多1个vCPU。从节点中获得最大性能   应用程序,您想要使用所有vCPU

  •   

阅读此guide

设置此值并重新部署您的应用后(需要一些时间来刷新),您可以检查您的过程资源管理器&#34;转到你的App Service - &gt;监控部分 - &gt;进程资源管理器。在这里,您可以找到App Service使用的当前核心数。