【问题标题】:Node.js Global variable sometimes = 1 and sometimes = 0, why?Node.js 全局变量有时 = 1 有时 = 0,为什么?
【发布时间】:2018-07-02 10:34:34
【问题描述】:

问题:

我的网络应用正在 Google Cloud App Engine 上运行。该 App Engine 网站目前正在运行 2 个 VM 实例。

奇怪的是,当一个特定事件被调用(大约一分钟 10 次)时,似乎有 2 个特定全局变量的不同实例。

我这样说是因为有时我的全局数组的长度是 0,有时它是 1,实际上它没有改变。

这可能是什么原因?

代码:

app.js

global.accountsArray = [];

file1.js

global.accountsArray.push(account);

file2.js

eventEmitter.on('event', function (body) {
    console.log("EMITTER");
    //sometimes prints out 1, sometimes prints out 0
    console.log("Array length: "+global.accountsArray.length);
    //
    console.log("DESTINATION: "+body.block.destination);
    //sometimes empty, sometimes not
    console.log("ARRAY :"+global.accountsArray);
    //
});

【问题讨论】:

    标签: javascript node.js google-app-engine google-cloud-platform global


    【解决方案1】:

    是什么原因造成的?

    变量accountsArray 在内存中。任何重新启动您的进程或虚拟机,都会重置该变量。考虑使用 redis 或 memcache 等弹性持久性存储。

    编辑

    应该提到,另一个原因是因为变量存在于每个虚拟机的内存中,没有公共存储,所以你会得到奇怪的结果。同样,通过使用两个 VM 都可以使用的通用会话存储解决了这个问题。

    【讨论】:

    • 据我所知,我从未使用过 memcache 或 redis。那些数据库或中间解决方案?
    • 键值数据库
    • 猜猜,我只需要将 var 存储在我的数据库中:/ 一定有更好的解决方案。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2018-04-23
    • 2011-07-23
    相关资源
    最近更新 更多