primus-redis-rooms
is a Redis store for Primus
and primus-rooms
.
It takes care of distributing messages to other instances using Redis Pub/Sub.
So, you can have client A
connected to server X
in room foo
and have
server Y
emit messages to foo
and client A
will receive them. Magic.
You can use primus-redis-rooms
with a single Redis instance, but it's not
recommended in production environment, since it makes Redis a single point of
failure.
var http = require('http'),
Primus = require('primus'),
PrimusRedisRooms = require('primus-redis-rooms');
var server = http.createServer();
var primus = new Primus(server, {
redis: {
host: 'localhost',
port: 6379,
options: {auth_pass: 'pass_key'}, //Optional, defaults to 'null'
channel: 'primus' // Optional, defaults to `'primus`'
},
transformer: 'websockets'
});
primus.use('redis', PrimusRedisRooms);
//
// This'll take care of sending the message to all clients in room called
// `our-room`.
//
primus.room('our-room').write('Hello world!');
Redis Sentinel is a failover mechanism built into Redis.
When using Sentinel, Redis client will automatically reconnect to new master server when current one goes down.
var http = require('http'),
Primus = require('primus'),
PrimusRedisRooms = require('primus-redis-rooms');
var server = http.createServer();
var primus = new Primus(server, {
redis: {
sentinel: true,
endpoints: [
{ host: 'localhost', port: 26379 },
{ host: 'localhost', port: 26380 },
{ host: 'localhost', port: 26381 }
],
masterName: 'mymaster'
channel: 'primus' // Optional, defaults to `'primus`'
},
transformer: 'websockets'
});
primus.use('redis', PrimusRedisRooms);
- Wire format change - data is no longer written to clients as
{ room: "foo", data: { our: "bar" } }
, only actual data is sent ({ our: "bar" }
in this case).