복붙노트

[REDIS] 다중 노드 인스턴스에서 공유 IO 객체

REDIS

다중 노드 인스턴스에서 공유 IO 객체

이미 레디 스 매장을 사용하여, 두 개의 노드 인스턴스간에 socket.io에 의해 만들어진 공유 객실에 원하지만 다른 노드 인스턴스에 io.sockets.in (ROOM_ID) .emit (MESSAGE, DATA)를 얻을 수 없습니다;

나는 노력하고 있어요 - 예 A -

io.set('store',...)

io.on('connection',function(socket){
   socket.join(''room-ABCD);
});

방송 뭔가, 내가 사용할 수 있어요

io.sockets.in('room-ABCD').emit('event',{data:{}});

그러나 유사한 방송 I 필요는 인스턴스 B.에서 수행

인스턴스 B의 io.set ( '저장')에 위의와 비슷하지만, 나는 ( '방-ABCD')를 io.sockets.in 사용할 수 아니다 개의 발광 ( '이벤트', {데이터 : {}}).

나의 이해는 - redisStore 그것이 다른 프로세스가 액세스 할 수있게 레디 스에서 소켓 + 객실 정보를 넣어 것입니다 [만약 내가 잘못 수정하시기 바랍니다].. 지금은 확인하고 노드의 다른 프로세스에서이 정보를 가져 오는 방법을 받고 있지 않다.

감사.

해결법

  1. ==============================

    1.경우 내가 좋은 문제를 이해. 개봉 시점이 질문했다 시작 당신은 B에서 아마 액세스 (호스트 레디 스되지 않음) 할 수 있습니다. 그래서 당신은 당신이에 방출 할 필요가 있다는 밀어 수 있습니다 :

    경우 내가 좋은 문제를 이해. 개봉 시점이 질문했다 시작 당신은 B에서 아마 액세스 (호스트 레디 스되지 않음) 할 수 있습니다. 그래서 당신은 당신이에 방출 할 필요가 있다는 밀어 수 있습니다 :

    LPUSH dataToEmit "{'room':'room-ABCD', 'data':'<escapeddata>'}" 
    

    과를 A 과정에서 당신은 dataToEmit에 BRPOP을 수행하고 콜백에 당신은 unjsonize 당신이 원하는 것을 방출 할 수있다

    당신은 또한 1 개 방 1 키에 파견 할 수있을 수 있습니다. 그의를 잊지 마세요 당신은이 물건에 대해 특정 데이터베이스 번호를 사용할 수 있습니다

    당신을 도울 수있는 I 희망

  2. ==============================

    2.질문과 관련된 쿼리에 응답 - 1, 2, 이것을.

    질문과 관련된 쿼리에 응답 - 1, 2, 이것을.

    내가 농축에 필요한 정확한 지점이었다 - 방을 가입.

    나는 client_socket.join ( "ROOM_NAME")를 사용했지만, 그것은 방에 클라이언트 소켓을 푸시합니다.

    이제, ( "ROOM_NAME") io.sockets.socket (client_socket.id) .join을 시도해보십시오.

    이것은 레디 스에 방 회원을 밀어 지금은 다른 노드 인스턴스에 액세스 할 수 있습니다.

    . ( "ROOM_NAME") io.sockets.in 공정 B에서 발광 ( "EVENT_NAME '{데이터"1 "}) 작동한다.

  3. from https://stackoverflow.com/questions/20396252/sharing-io-object-in-multiple-node-instances by cc-by-sa and MIT license