Я пытаюсь использовать socket.io-redis для масштабирования моего приложения на Heroku до 2 динамиков (или более). Вот мой код (где config.redis это просто RedisToGo порт объекта жилищного строительства, хозяин, и передавать значения):Масштабирование до 2+ динамиков на Heroku с socket.io-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']
});
..so гнездо. io не пытается использовать опрос.
У меня также есть правильный Heroku env vars, настроенный для RedisToGo (REDISTOGO_HOST, REDISTOGO_PASS, REDISTOGO_PORT).
Когда мы масштабируемся до 1 дино, поведение гнезда является идеальным. На 2-х динамиках поведение отключено - запросы произвольно выполняются либо на 1 динамо, либо на другом, а события сокета, которые испускаются, отправляются только клиентам, работающим на dyno, на который был сделан запрос, а не на всех (какой сокет .io-redis & RedisToGo должен заботиться).
Любые мысли были бы очень благодарны!