node.js - 具有带有 node.js 集群模块的全局对象

标签 node.js rest resources express

我在基于 node.js 中的 express 构建的 Rest api 应用程序中使用集群。

利用集群的 Rest API 的完整代码是。

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
var counter = {"color":{},"weight":{}};

if (cluster.isMaster) {

        for (var i = 0; i < numCPUs; i++) {
            cluster.fork();
        }

        cluster.on('exit', function(worker, code, signal) {         
            var exitCode = worker.process.exitCode;
            console.log('worker ' + worker.process.pid + ' died ('+exitCode+'). restarting...');
            cluster.fork();     
        });



} else {    

        var express = require("express"),
        var msg;
        var server = express();     
        server.use(express.bodyParser());
        server.post('/grouper', function (req, res) {

            //some update on global counter         

        });

        server.listen(8080);

}

我的问题是,有什么方法可以让我拥有一个全局对象,就像在不同 fork 实例之间的代码中显示的计数器对象一样,以便所有实例都更新同一个对象?

最佳答案

所有工作进程实际上都是独立的应用程序变量的新副本。

每个 worker 都是使用 child_process.fork 创建的全功能进程.在文档中你可以得到如下语句:

No shared state between the workers. Because workers are all separate processes, they can be killed or re-spawned depending on your program's needs, without affecting other workers

所以答案是否定的,您不能共享变量 counter,您的集群进程之间不会共享变量。

关于node.js - 具有带有 node.js 集群模块的全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17653601/

相关文章:

json - 读取 Json 中的对象

javascript - 获取请求在 Angular 5 应用程序中抛出 404 错误

linux - 文件内容到 Blob 字符串转换

java - 使用 REST 模板 Java Spring MVC 从服务器下载大文件

node.js - 连接 mongodb 中的两个集合

node.js - Redis hGet 方法在异步调用时在第二次调用时陷入死锁

.net - RestSharp 将图像发布到 WCF REST 服务

c++ - Win32 : Changing Program Icon

android - APK中的资源没有压缩?

java - 如何访问和播放 Java 资源类文件夹中的音频文件?