消息监听器上的Redis被触发两次

我正在使用NodeJS和Redis聊天应用程序,为什么我使用Redis订阅,因为我需要通知其他用户,当我用户login时,我的问题开始时,用户login第一次工作正常的消息listener调用了一次,但是当同一个用户刷新页面时,我发现这个publish方法已经被调用了两次。

以下是我使用的代码示例:

var redisClient = redis.createClient({ auth_pass: password }); var myServer; myServer = require('http').createServer(app); var socketIo = require('socket.io').listen(myServer); myServer.listen(port); redisClient.subscribe('myChannel'); socketIo.on('connection', function(dbSocket) { var redisClient2 = redis.createClient({ auth_pass: password }); /***Code for handle request***/ } redisClient.on('message', function(channel, message) { //When refresh page , and I call publish method , the system enter message listener twice var data = JSON.parse(message); }); 

这是因为你的redisClient.on('message')事件是在连接的callback中设置的,所以每次连接build立时,都要重新附加事件。

将这个代码块移到on('connection')事件之外应该解决问题。

 redisClient.on('message', function(channel, message) { //When refresh page , and I call publish method , the system enter message listener twice var data = JSON.parse(message); });