Разрывая мои волосы с этим... кому-то удалось масштабировать Socket.IO на несколько "рабочих" процессов, порожденных Node.js cluster?
Предположим, что у меня есть следующие рабочие процессы четыре (псевдо):
// on the server
var express = require('express');
var server = express();
var socket = require('socket.io');
var io = socket.listen(server);
// socket.io
io.set('store', new socket.RedisStore);
// set-up connections...
io.sockets.on('connection', function(socket) {
socket.on('join', function(rooms) {
rooms.forEach(function(room) {
socket.join(room);
});
});
socket.on('leave', function(rooms) {
rooms.forEach(function(room) {
socket.leave(room);
});
});
});
// Emit a message every second
function send() {
io.sockets.in('room').emit('data', 'howdy');
}
setInterval(send, 1000);
И в браузере...
// on the client
socket = io.connect();
socket.emit('join', ['room']);
socket.on('data', function(data){
console.log(data);
});
Проблема: Каждая вторая, я получаю сообщения четыре, из-за четырех отдельных рабочих процессов, отправляющих сообщения.
Как обеспечить, чтобы сообщение отправлялось только один раз?