Node.js 记忆是如何在Heroku dynos中工作的?
假设我在节点中有一个动态创建的数组,我在heroku dyno上运行它:Node.js 记忆是如何在Heroku dynos中工作的?,node.js,heroku,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.
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);
});
现在,可以跨其他动态对象创建连接
数组和wm
weakmap
heroku能跨越每个dyno的变量吗?或者我需要使用其他数据结构(如数据库)来保存信息吗?Dynos是独立的,节点进程应该是无状态的(在任何环境中,Heroku或其他环境中都是如此) 将状态存储在可管理和共享的外部位置,以最适合您的应用程序。Redis和Postgres是node最常见的两个系统 由于您使用的是socket.io,因此应确保遵循其跨多个节点的指南:
我看到它提供了一个小示例:
var io=require('socket.io')(3000)代码>var redis=require('socket.io redis')代码>io.adapter(redis({host:'localhost',port:6379}))
然而,还有更多具体的例子,特别是针对heroku的例子吗?没有,但很快就会在blog.heroku.com上出现(我们将发布一篇博客文章,演示如何在heroku上跨dynos使用socket.io,并进行粘性会话)