Heroku dynos的内存如何工作?

时间:2016-03-21 23:53:15

标签: node.js heroku

假设我在节点中有一个动态创建的数组,我在heroku dyno上运行它:

var connections = [];
var wm = new WeakMap();

io.sockets.on('connection', function(socket) {

    socket.once('disconnect', function() {
        connections.splice(connections.indexOf(socket), 1);
        socket.disconnect();
        console.log("Disconnected: %s sockets remaining.", connections.length);
    });

    socket.on('idAndApi', (data) => {
        wm.set(socket, data);
    });

    connections.push(socket);
    console.log("Connected: %s sockets connected.", connections.length);
});

现在,可以在其他dynos中创建connections数组和wm弱图。

Heroku能跨越每个dyno的变量吗?或者我是否需要使用其他一些数据结构(例如数据库)来保存信息?

1 个答案:

答案 0 :(得分:2)

Dynos是独立的,节点进程应该是无状态的(在任何环境中都是如此,Heroku或其他)。

将状态外部存储在可以管理和共享的位置,以最适合您的应用。 Redis和Postgres是节点最常用的两个系统。

由于您正在使用socket.io,因此您应该确保遵循其指南来跨越多个节点:

http://socket.io/docs/using-multiple-nodes/