gpt4 book ai didi

node.js - 使用 socket.io-redis 和 RedisToGo 在 Heroku 上扩展到 2+ dynos

转载 作者:搜寻专家 更新时间:2023-10-31 23:24:58 25 4
gpt4 key购买 nike

我正在尝试使用 socket.io-redis 将我在 Heroku 上的应用程序扩展到 2 个测功机(或更多)。这是我的代码(其中 config.redis 只是一个包含 RedisToGo 端口、主机和传递值的对象):

var redisApp = require('redis');
var redis = require('socket.io-redis');
if(process.env.NODE_ENV === 'production') {
var socketpub = redisApp.createClient(config.redis.port, config.redis.host, {auth_pass: config.redis.pass, return_buffers: true});
var socketsub = redisApp.createClient(config.redis.port, config.redis.host, {auth_pass: config.redis.pass, detect_buffers: true});
var client = redisApp.createClient(config.redis.port, config.redis.host, {auth_pass: config.redis.pass, return_buffers: true});
socketio.adapter(redis({
pubClient: socketpub,
subClient: socketsub,
redisClient: client
}));
}

在客户端我有:

var ioSocket = io('', {
path: '/socket.io-client',
'force new connection': true,
transports: ['websocket']
});

..所以 socket.io 不会尝试使用轮询。

我还为 RedisToGo 配置了正确的 Heroku 环境变量(REDISTOGO_HOST,REDISTOGO_PASS,REDISTOGO_PORT)。

当我们缩放到 1 dyno 时,套接字行为是完美的。在 2 dynos 时,行为偏离了 - 请求被随机地发送到 1 dyno 或另一个,并且发出的套接字事件仅发送到运行在发出请求的 dyno 上的客户端,而不是所有(哪个套接字.io-redis 和 RedisToGo 应该负责)。

如有任何想法,我们将不胜感激!

最佳答案

不确定这是否对您有帮助,但我正在以这种方式使用 redis 和 socketio,并且运行良好。

var redis = require('redis').createClient;
var adapter = require('socket.io-redis');
var port = config.redistogo.port;
var host = config.redistogo.host;

var pub = redis(port, host, {
auth_pass: auth_pass
});

var sub = redis(port, host, {
detect_buffers: true,
auth_pass: auth_pass
});

io.adapter(adapter({
pubClient: pub,
subClient: sub
}));

关于node.js - 使用 socket.io-redis 和 RedisToGo 在 Heroku 上扩展到 2+ dynos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28842266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com