Node.js全局变量有时= 1,有时= 0,为什么?

时间:2018-01-23 14:52:57

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

问题:

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

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

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

可能导致这种情况的原因是什么?

CODE:

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);
    //
});

1 个答案:

答案 0 :(得分:1)

可能导致此问题的原因是什么?

变量accountsArray在内存中。任何重启到您的进程或vm,将重置该变量。考虑使用商店来恢复弹性,如redis或memcache。

修改

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