2015-02-06 3 views
1

NodeJS 및 Redis를 사용하여 채팅 응용 프로그램에서 작업하고 있습니다. Redis 구독을 사용하는 이유는 사용자가 로그인 할 때 다른 사용자에게 알릴 필요가 있기 때문입니다. 처음에는 메시지 리스너가 한 번 호출 할 때 처음에는 잘 작동했지만 동일한 사용자가 페이지를 새로 고침하면 게시 메소드가 두 번 호출 된 것으로 나타났습니다.메시지 청취자의 Redis가 두 번 트리거 됨

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 ('메시지') 이벤트가 연결에서의 콜백 내에서 설정되어 있기 때문입니다

+0

당신이 특정 문제를 명확히 또는 정확하게 당신이 필요 강조하기 위해 추가 정보를 추가하십시오 을 요구하는지 불분명하기 때문에이 질문에 플래그. 현재 작성된 내용이므로 귀하가 원하는 내용을 정확하게 말하기는 어렵습니다. How to Ask 페이지에서이 질문에 대한 설명을 참조하십시오. – bitoiu

+0

나는 나의 질문을 업데이 트하는 데 도움이 될 수 있습니다 내 문제를 식별하는 데 도움이 될 수 있습니다, @bitoiu 또한 내 질문에 투표를 제거하십시오 제발, 그리고 미리 감사드립니다. – nkarmi

+0

도움이 될만한 유용한 코드를 제공해야합니다. 매우 광범위한 시나리오를 설명하고 있습니다. http://stackoverflow.com/help/how-to-ask – bitoiu

답변

1

따라서 모든 :

여기 내가 사용하는 내 코드의 샘플입니다 연결이 이루어지면 이벤트를 다시 첨부합니다.

이 코드 블록을 on ('연결') 이벤트 외부로 이동하면 문제를 해결할 수 있습니다.

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); 
    }); 
관련 문제