假设我在节点中有一个动态创建的数组,我在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的变量吗?或者我是否需要使用其他一些数据结构(例如数据库)来保存信息?
答案 0 :(得分:2)
Dynos是独立的,节点进程应该是无状态的(在任何环境中都是如此,Heroku或其他)。
将状态外部存储在可以管理和共享的位置,以最适合您的应用。 Redis和Postgres是节点最常用的两个系统。
由于您正在使用socket.io,因此您应该确保遵循其指南来跨越多个节点: