Я создаю приложение, развернутое в Heroku, которое использует Websockets.
Соединение websockets работает правильно, когда я использую только 1 dyno, но когда я масштабируюсь до > 1, я получаю следующие ошибки.
POST HTTP://****.herokuapp.com/socket.io/EIO = 2 & транспорт = опроса & т = 1412600135378-1 & ИСС = zQzJJ8oPo5p3yiwIAAAC 400 (неверный запрос) socket.io-1.0.4.js: 2
Подключение к WebSocket для 'WS://****.herokuapp.com/socket.io/EIO = 2 & транспорт = WebSocket & ИСС = zQzJJ8oPo5p3yiwIAAAC? failed: WebSocket закрыт до установления соединения. socket.io-1.0.4.js: 2
Я использую адаптер Redis для включения нескольких веб-процессов.
var io = socket.listen(server);
var redisAdapter = require('socket.io-redis');
var redis = require('redis');
var pub = redis.createClient(18049, '[URI]', {auth_pass:"[PASS]"});
var sub = redis.createClient(18049, '[URI]', {detect_buffers: true, auth_pass:"[PASS]"} );
io.adapter( redisAdapter({pubClient: pub, subClient: sub}) );
Это работает на localhost (я использую мастера для запуска, как это делает Heroku, и я запускаю 2 веб-процесса, как и на Heroku).
Прежде чем я применил адаптер redis, у меня возникла ошибка установления связи с веб-сокетами, поэтому адаптер имел некоторый эффект. Кроме того, он работает время от времени, я предполагаю, когда сокеты соответствуют одному и тому же веб-дино.
Я также пытался включить липкие сессии, но потом он никогда не работает.
var sticky = require('sticky-session');
sticky(1, server).listen(port, function (err) {
if (err) {
console.error(err);
return process.exit(1);
}
console.log('Worker listening on %s', port);
});