Was sind die Ansätze zum Skalieren von socket.io-Anwendungen? Ich sehe das folgende Problem, das ich nicht verstehe, wie lösen:Scaling socket.io zwischen Servern
Es ist schwer für mich vorzustellen, wie es funktionieren sollte - vielleicht eine gemeinsame Variante speichern für alle notwendigen Informationen, wie zum Beispiel - ist das eine Möglichkeit?
EDIT: Ich fand diesen Artikel: http://www.ranu.com.ar/2011/11/redisstore-and-rooms-with-socketio.html
darauf basierenden ich folgendes getan:
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}));
});
Aber ich folgende Fehlermeldung erhalten:
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)
definitiv Meine Redis Zugangsdaten sind richtig.
EDIT: Sehr seltsam, aber mit Redis Autorisierung deaktiviert dann funktioniert alles. Die Frage ist also immer noch gültig. Außerdem habe ich eine Frage, wie man Informationen (zum Beispiel Benutzername) für alle Teilnehmer einer Gruppe (Raum) in diesem RedisStorage-Modus bekommt, ist das möglich? Idealerweise kann dies über die Redis Pub/Sub-Funktionalität erfolgen.