2014-06-11 1 views
1

이것은 nodejs에서 처음으로 발생하며 몇 가지 문제가 있습니다. 주된 문제점은 사용자가 서버에서 두 개 이상의 신호를 수신한다는 것입니다. 카운트는 페이지 새로 고침을 기반으로합니다. 다음은 내 코드입니다 :사용자가 nodejs에서 두 개 이상의 알림을 수신합니다.

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 코드입니다 : 내가 서버 USER_ID로 보내 서버의 연결에 기본적으로

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와 같은 이름의 새로운 방을 만든다. 물론 연결 해제시 방을 삭제해야합니다. 나는 sub.on()이 두 번 이상 해고되었음을 알았지 만, 나는 이유를 알 수 없다. 나는 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다.

답변

1

문제는 당신의 connection 이벤트 내부 핸들러를 사용하고 매번 클라이언트는 connection 이벤트에서 당신의 sub.on

장소 sub.on을 포함하여 connection 이벤트 내부의 모든 것을 실행할 연결하고는 두 번을 중지해야한다는 것입니다 메시지

+1

네가 맞다! 도와 줘서 고마워. :) –

관련 문제