使用redis作为pub-sub时不需要的多个消息

下面的代码工作的很好,当我做pub / sub使用socket.io。

基本上,我从浏览器发送聊天消息。 在服务器上,我收听这条消息,并把它发回给服务器,同样的消息。 所以,我希望每发送一条消息,都会返回/打印1条消息。

在下面,我可以从多个浏览器login,当我发送一条聊天消息时,它将按照预期返回/打印为单个聊天消息。

io.use(socketHandshake({store: sessionStore, key:'jsessionid', secret:'secret', parser:cookieParser()})); io.on('connection', function (socket) { socket.on('chat', function (message) { io.emit('chat', "hello world"); }); }); 

但是,当我尝试使用redis做pub / sub时,出现了一个问题。

从第一个浏览器:1个聊天消息导致打印出1个聊天消息

从第二个浏览器:1个聊天消息导致打印出2个聊天消息

从第三个浏览器:1个聊天消息导致打印出3个聊天消息

 var sub = redis.createClient(); var pub = redis.createClient(); sub.subscribe('chat'); io.use(socketHandshake({store: sessionStore, key:'jsessionid', secret:'secret', parser:cookieParser()})); io.on('connection', function (socket) { socket.on('chat', function (message) { // io.emit('chat', "hello world"); pub.publish('chat', "hello world"); }); sub.on('message', function (channel, message) { io.emit(channel, message); }); }); 

我错过了什么? 我是一个初学者,我正在尝试这个例子http://blog.cloudfoundry.org/2013/01/24/scaling-real-time-apps-on-cloud-foundry-using-node-js-and -redis /使用最新版本的express,socket.io,socket.io-handshake和redis。

我被困在这个redis pub / sub。 请帮忙。

您正在为每个连接添加一个新的“消息”处理程序。 所以这就是为什么你开始看到越来越多的重复与越来越多的连接。 尝试移动你的sub.on('message', ...); 在你的socket.io连接处理程序之外。

我知道这是一个老问题,但也许这可以帮助人们find另一个解决scheme,昨天发生这个错误后,我发现自己是一个解决scheme。 尝试改变io.emit(通道,消息); 进入socket.emit(channel,message);