用户从nodejs收到超过1个通知

时间:2014-06-11 09:04:53

标签: javascript node.js sockets notifications socket.io

这是我第一次使用nodejs,我遇到了一些问题。主要问题是用户从服务器接收到多于1个信号。计数基于页面的刷新。 以下是我的代码:

var http = require('http');
var server = http.createServer().listen(1332);
var io = require('socket.io').listen(server);
var redis = require('redis');
var sub = redis.createClient();

//Subscribe to the Redis chat channel
sub.subscribe('notification_count');
console.log("Server is running...\nClick on Ctrl+C to exit");

io.sockets.on('connection', function (socket) {
    var user_id = socket["handshake"]["query"]["user_id"];
    console.log("user_id", user_id);
    socket.room = user_id;
    socket.join(user_id);

    socket.on('disconnect', function(){
        socket.leave(socket.room);
    });

//Grab message from Redis and send to client
    sub.on('message', function(channel, message){
        io.sockets.in(message).emit('message', message );
    });
});

这是客户端js代码:

var socket = io.connect('localhost:1332', { query: "user_id={{ request.user.id }}" });
socket.on('connect', function(){
    console.log("connected");
});

socket.on('message', function(message) {
     //something
});

基本上在从服务器连接时,我向服务器发送user_id。之后我创建了一个新的房间,其名称与user_id相同。当然要断开房间应该删除。我注意到sub.on()不止一次被触发,但我无法弄明白为什么。我将不胜感激任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:1)

问题是你在connection事件中使用了一个处理程序,每次客户端连接它都会执行connection事件中的所有内容,包括你的sub.on

sub.on放在connection事件之外,它应该停止双重消息