[REDIS] '메시지'청취자에 레디 스를 제거하는 방법
REDIS'메시지'청취자에 레디 스를 제거하는 방법
전형적인 레디 스 채팅 예를 들어 이런 식으로 뭔가를 갈 것입니다 (단지 하나의 예를 들어 https://github.com/emrahayanoglu/Socket.io-Redis-RealTime-Chat-Example/blob/master/chatServer.js 참조)
io.sockets.on('connection', function (client) { //websocket connection
redis1.subscribe("chat");
redis1.on("message", function(channel, message) {
console.log(message);
client.send(message);
});
client.on('message', function(msg) {
redis2.publish("chat",msg.message);
});
client.on('disconnect', function() {
redis1.quit();
});
});
그러나 여기에 문제는 클라이언트의 분리 '는 redis1.on ('메시지 ', FUNC가 () {}) 리스너가 여전히 연결되어있는 경우이다. 콘솔 메시지를 출력 할 것입니다. 하나 redis1의 이벤트 listners를 검사한다면, 그들은 여전히 익명 함수 듣기를 찾을 것입니다.
이 문제는 더 redis1.off (...) 기능이 없다는 것입니다. 그럼, 어떻게 하나의 바인딩을 해제 / 탈퇴 / 삭제 / 제거 레디 스 메시지 리스너를합니까?
참고 :이 다른 웹 소켓에 연결된 사용자의 레디 스 연결을 중단하기 때문에 하나는 그냥 redis1.end ()를 할 수 없습니다.
해결법
-
==============================
1.내가 노드 REPL에서 장난에 의해 발견 한 것을 유일한 해결책은 가입 할 수 redis.on () 함수를 사용하지 않는 것입니다. 대신에, 하나는 redis.addListener ()와 redis.removeListener () 함수를 사용해야합니다. 또한, 하나의 이벤트 콜백으로 익명 함수를 사용하지 않아야합니다. 하나는 같은 것을 할 수 있습니다 :
내가 노드 REPL에서 장난에 의해 발견 한 것을 유일한 해결책은 가입 할 수 redis.on () 함수를 사용하지 않는 것입니다. 대신에, 하나는 redis.addListener ()와 redis.removeListener () 함수를 사용해야합니다. 또한, 하나의 이벤트 콜백으로 익명 함수를 사용하지 않아야합니다. 하나는 같은 것을 할 수 있습니다 :
var callback = function(channel, message){ }; redis1.addListener('message', callback); client.on('disconnect', function(){ redis1.removeListener('message', callback); })
from https://stackoverflow.com/questions/11617811/how-to-remove-redis-on-message-listeners by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 인상 오류 : NOAUTH 인증이 필요하지만 암호 설정이 없습니다 (0) | 2020.01.02 |
---|---|
[REDIS] 어떻게 레디 스를 사용하여 작업에 세션을 얻을 수 있습니다, 표현 및 socket.io? (0) | 2020.01.02 |
[REDIS] AWS에서 채팅을 확장하기위한 아이디어? (0) | 2020.01.02 |
[REDIS] 시스템이 초기화 시스템 (PID 1)로 systemd로 부팅되지 않았습니다. 작동 할 수 없습니다 (0) | 2020.01.02 |
[REDIS] 레디 스 해시 거기에 MGET 아날로그인가? (0) | 2020.01.02 |