¿Cuáles son los enfoques para escalar aplicaciones socket.io? Veo el siguiente problema que no entiendo cómo resolver:Escalado socket.io entre servidores
- ¿Cómo se puede transmitir una aplicación socket.io escalada a una habitación? En otras palabras, ¿cómo sabrá socket.io sobre los vecinos de otros servidores?
Me resulta difícil imaginar cómo debería funcionar, tal vez una tienda de variante compartida para toda la información necesaria, como redis, ¿es esta una posibilidad?
EDIT: He encontrado este artículo: http://www.ranu.com.ar/2011/11/redisstore-and-rooms-with-socketio.html
Sobre la base de lo que hice lo siguiente:
var pub = redis.createClient();
var sub = redis.createClient();
var store = redis.createClient();
pub.auth("pass");
sub.auth("pass");
store.auth("pass");
io.configure(function(){
io.enable('browser client minification'); // send minified client
io.enable('browser client etag'); // apply etag caching logic based on version number
io.enable('browser client gzip'); // gzip the file
io.set('log level', 1); // reduce logging
io.set('transports', [ // enable all transports (optional if you want flashsocket)
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);
var RedisStore = require('socket.io/lib/stores/redis');
io.set('store', new RedisStore({redisPub:pub, redisSub:sub, redisClient:store}));
});
pero me da el siguiente error:
Error: Uncaught, unspecified 'error' event.
at RedisClient.emit (events.js:50:15)
at Command.callback (/home/qwe/chat/io2/node_modules/socket.io/node_modules/redis/index.js:232:29)
at RedisClient.return_error (/home/qwe/chat/io2/node_modules/socket.io/node_modules/redis/index.js:382:25)
at RedisReplyParser.<anonymous> (/home/qwe/chat/io2/node_modules/socket.io/node_modules/redis/index.js:78:14)
at RedisReplyParser.emit (events.js:67:17)
at RedisReplyParser.send_error ( /home/qwe/chat/io2/node_modules/socket.io/node_modules/redis/lib/parser/javascript.js:265:14)
at RedisReplyParser.execute (/home/qwe/chat/io2/node_modules/socket.io/node_modules/redis/lib/parser/javascript.js:124:22)
at RedisClient.on_data (/home/qwe/chat/io2/node_modules/socket.io/node_modules/redis/index.js:358:27)
at Socket.<anonymous> (/home/qwe/chat/io2/node_modules/socket.io/node_modules/redis/index.js:93:14)
at Socket.emit (events.js:67:17)
Mis credenciales Redis son definitivamente correcto.
EDITAR: Muy extraño, pero con la autorización de Redis desactivada, entonces todo funciona. Entonces la pregunta aún es válida. Además, tengo una pregunta sobre cómo obtener información (por ejemplo, nombre de usuario) para todos los participantes de un grupo (sala) en este modo RedisStorage, ¿es posible implementar esto? Idealmente, esto se puede hacer a través de la funcionalidad Redis Pub/Sub.