Quali sono gli approcci per il dimensionamento delle applicazioni socket.io? Vedo il seguente problema che non capisco come risolvere:Scaling socket.io tra server
- Come si può trasmettere un'app socket.io in scala a una stanza? In altre parole, in che modo socket.io conoscerà i vicini di altri server?
È difficile per me immaginare come dovrebbe funzionare, forse un archivio di varianti condiviso per tutte le informazioni necessarie, come i redis, è questa una possibilità?
EDIT: Ho trovato questo articolo: http://www.ranu.com.ar/2011/11/redisstore-and-rooms-with-socketio.html
Sulla base di esso ho fatto la seguente:
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}));
});
ma ottengo il seguente errore:
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)
mie credenziali Redis sono sicuramente corretta.
MODIFICA: molto strano, ma con autorizzazione Redis disattivata, quindi tutto funziona. Quindi la domanda è ancora valida. Inoltre, ho una domanda su come ottenere informazioni (ad esempio il nome utente) per tutti i partecipanti di un gruppo (stanza) in questa modalità RedisStorage, è possibile implementarlo? Idealmente questo può essere fatto attraverso la funzionalità Redis Pub/Sub.