[REDIS] 어떻게 여러 서버에 socket.io 전송 메시지는 무엇입니까?
REDIS어떻게 여러 서버에 socket.io 전송 메시지는 무엇입니까?
Socket.io API는 모든 클라이언트에 메시지를 보낼 수있는 기능을 가지고있다.
하나 개의 서버 메모리에있는 모든 소켓, 난 그 서버 한 모든 고객에게 메시지를 보낼 수있는 방법을 이해하고, 그 꽤 명백하다. 그러나 소켓을 저장하기 위해 레디 스를 사용하여 여러 서버에 대한?
I 클라이언트가 있다면 서버 (Z)에 연결된 서버 (Y)와 클라이언트 (B)에 연결된 (그리고 레디 스가 저장소 박스) 및 I는 하나 개의 서버에 socket.broadcast.emit 않는 다른 서버에서 클라이언트가이 메시지를 수신 할 것이다. 어떻게?
어떻게 실제로 다른 서버에 연결된 클라이언트는 메시지를받을 수 있나요?
해결법
-
==============================
1.연결된 모든 클라이언트가 불가능하게 메모리에 저장됩니다 (물론, 조용한되지하지만 더 그에서 이상) 다른 socket.io 서버에 연결된 클라이언트에서 이벤트를 보내고받을 수 있도록 Socket.io는 기본적으로 MemoryStore을 사용합니다.
연결된 모든 클라이언트가 불가능하게 메모리에 저장됩니다 (물론, 조용한되지하지만 더 그에서 이상) 다른 socket.io 서버에 연결된 클라이언트에서 이벤트를 보내고받을 수 있도록 Socket.io는 기본적으로 MemoryStore을 사용합니다.
한 가지 방법은 socket.io 서버가 모든 이벤트를 수신 모두가 모든 서버 레디 스의 술집 서브를 사용하는 것이되어 있는지 확인합니다. 그래서, 대신 socket.emit 하나를 사용하여 레디 스에 게시 할 수 있습니다.
redis_client = require('redis').createClient(); redis_client.publish('channelName', data);
그리고 모든 소켓 서버 레디 스를 통해 그들에게 연결된 클라이언트에 메시지의 발광을 받으면 해당 채널에 가입.
redis_sub = require('redis').createClient(); redis_sub.subscribe('channelName', 'moreChannels'); redis_sub.on("message", function (channel, message) { socket.emit(channel, message); });
복잡 물건! 하지만 알고 보니 실제로 해달라고 목표를 달성하기 위해 코드의 이러한 종류의 필요 기다립니다. Socket.io는 기본적으로 위의 코드 그래서 당신은 당신이 단일 서버에 대한 쓰기 것처럼 Socket.io 코드를 작성할 수 있습니다 여전히 통해 다른 socket.io 서버로 전파 얻을 것이다 더 좋은 방식으로 어떻게해야 무엇합니까 RedisStore있다 레디 스.
socket.io 대신 메모리의 채널로 레디 스를 사용하여 여러 서버에서 메시지를 전송 요약합니다.
-
==============================
2.당신이 할 수있는 몇 가지 방법이 있습니다. 이 질문에 더 많은 정보를 원하시면. 레디 스에서 술집 / 하위 작동하는 방법의 좋은 설명은 레디 스 '문서에서, 여기에있다. 패러다임이 일반적으로 어떻게 작동하는지에 대한 설명은 위키 백과에 여기에있다.
당신이 할 수있는 몇 가지 방법이 있습니다. 이 질문에 더 많은 정보를 원하시면. 레디 스에서 술집 / 하위 작동하는 방법의 좋은 설명은 레디 스 '문서에서, 여기에있다. 패러다임이 일반적으로 어떻게 작동하는지에 대한 설명은 위키 백과에 여기에있다.
레디 스의 문서를 인용 :
from https://stackoverflow.com/questions/17431662/how-does-socket-io-send-messages-across-multiple-servers by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 : 어떻게 키로 내 해시를 정렬 할 수 있습니다? (0) | 2020.01.06 |
---|---|
[REDIS] 레디 스 필드의 값을 기준으로 해시를 찾는 (0) | 2020.01.06 |
[REDIS] 읽기 작업과 레디 스에서의 트랜잭션 (0) | 2020.01.05 |
[REDIS] 레디 스 - 큰지도를 저장하는 가장 좋은 방법 (사전) (0) | 2020.01.05 |
[REDIS] Node.js를 쿠에 실패한 작업을 다시 시작하는 방법 (0) | 2020.01.05 |