복붙노트

[REDIS] socket.io에 RedisStore 사용에 예

REDIS

socket.io에 RedisStore 사용에 예

나는 여러 프로세스 및 / 또는 서버에서 간단한 socket.io 응용 프로그램을 확장하려합니다.

Socket.io는 RedisStore을 지원하지만 나는 그것을 사용하는 방법을 혼동하고있다.

나는이 예제를 찾고 있어요 http://www.ranu.com.ar/post/50418940422/redisstore-and-rooms-with-socket-io

하지만 난 그 코드에 RedisStore를 사용하여 MemoryStore를 사용에서 어떤 다른 것이 이해가 안 돼요. 누군가가 나에게 그것을 설명 할 수 있습니까?

또한 socket.io 자신의 레디 스 클라이언트와 세트 작성 redisstore 대 사용하는 구성의 차이는 무엇인가 / 자신의 데이터를 얻을?

나는 Node.js를 새로운 해요, socket.io 내가 뭔가를 분명 놓친 경우 이렇게 지적하십시오 레디 스.

해결법

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

    1.차이점은 기본 MemoryStore를 사용할 때 노동자들 사이에 IPC가 없기 때문에, 당신은 노동자에 방출하는 것이 모든 메시지는 같은 노동자에 연결된 클라이언트로 전송 될 것입니다. RedisStore를 사용하여, 당신의 메시지는 모든 근로자가 가입되어 레디 스 서버에 게시됩니다. 따라서, 메시지는 모든 근로자 및 연결된 모든 클라이언트에 의해 선택 및 방송된다.

    차이점은 기본 MemoryStore를 사용할 때 노동자들 사이에 IPC가 없기 때문에, 당신은 노동자에 방출하는 것이 모든 메시지는 같은 노동자에 연결된 클라이언트로 전송 될 것입니다. RedisStore를 사용하여, 당신의 메시지는 모든 근로자가 가입되어 레디 스 서버에 게시됩니다. 따라서, 메시지는 모든 근로자 및 연결된 모든 클라이언트에 의해 선택 및 방송된다.

    나는 RedisStore 속속들이 잘 알고 아니에요, 나는 확실히 모든 차이점에 대한 아니에요 그래서. 그러나 그 일을하는 것은 자신을 완벽하게 유효한 연습이 될 것입니다. 이 경우, 당신은 레디 스 서버에 모든 메시지를 게시 할 수 있고, 당신의 소켓 핸들러 사람들에게들을 수 있습니다. 그것은 아마도 당신을 위해 더 많은 작업이 될 것입니다,하지만 당신은 당신이 그것을 설정하는 방법을보다 효율적으로 제어 할 수있다. 나 자신과 비슷한 일을했습니다 :

    // Publishing a message somewhere
    var pub = redis.createClient();
    pub.publish("messages", JSON.stringify({type: "foo", content: "bar"}));
    
    // Socket handler
    io.sockets.on("connection", function(socket) {
      var sub = redis.createClient();
      sub.subscribe("messages");
      sub.on("message", function(channel, message) {
        socket.send(message);
      });
    
      socket.on("disconnect", function() {
        sub.unsubscribe("messages");
        sub.quit();
      });
    });
    

    이것은 또한 당신이 다른 채널에 가입 / 게시하여 예를 들어, 자신을 라우팅 고급 메시지 돌봐 의미합니다. RedisStore, 당신은 socket.io 채널을 사용하여 무료로 그 기능을 얻을 (( "채널") io.sockets.of. 발광 (...)).

    이와 잠재적으로 큰 단점은 socket.io 세션이 노동자 사이에 공유되지 않는 것입니다. 당신이 긴 폴링 전송 중 하나를 사용하는 경우 이것은 아마도 평균 문제를 것이다.

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

    2.나는 데이터 저장소로 사용 레디 스에 작은 GitHub의 프로젝트를 설정합니다.

    나는 데이터 저장소로 사용 레디 스에 작은 GitHub의 프로젝트를 설정합니다.

    지금 당신은 여러 socket.io 서버 프로세스를 실행할 수 있습니다.

    https://github.com/markap/socket.io-scale

  3. ==============================

    3.당신이 'RedisStore'를 사용할 때의 차이는 그 자체가 레디 스에 소켓 하트 비트 및 세션 정보를 저장합니다 Socket.IO에, 당신은 Node.js를 함께 클러스터를 사용하는 경우, 사용자 클라이언트가 사용할 수 있습니다, 그입니다.

    당신이 'RedisStore'를 사용할 때의 차이는 그 자체가 레디 스에 소켓 하트 비트 및 세션 정보를 저장합니다 Socket.IO에, 당신은 Node.js를 함께 클러스터를 사용하는 경우, 사용자 클라이언트가 사용할 수 있습니다, 그입니다.

    레디 스없이, 클라이언트는 Node.js를 다음 시간을 처리 변경 될 수 있으므로 세션이 손실됩니다.

  4. ==============================

    4.당신이 하나의 프로세스 만 볼 수이기 때문에, memStore 작동하지 않습니다 실행 Node.js를 인스턴스 클러스터가있는 경우의 차이는있다.

    당신이 하나의 프로세스 만 볼 수이기 때문에, memStore 작동하지 않습니다 실행 Node.js를 인스턴스 클러스터가있는 경우의 차이는있다.

  5. from https://stackoverflow.com/questions/9267292/examples-in-using-redisstore-in-socket-io by cc-by-sa and MIT license