복붙노트

[REDIS] nodeJS에서 펍 / 서브 구현

REDIS

nodeJS에서 펍 / 서브 구현

나는 nodeJS 다른 공개 / 등록 구현과 놀아 봤는데 하나는 특정 응용 프로그램에 가장 될 것이라고 궁금 해서요. 응용 프로그램의 요구 사항은 멀티 채널, 멀티 유저 3D 환경에서 객체의 동기화 실시간을 포함한다.

나는 socket.io를 사용하여 시작했다 채널의 기본 배열을 생성, 사용자가 메시지를 보낼 때, 그 채널의 사용자를 통해 반복하고 사용자의 클라이언트에 메시지를 보냅니다. 이것은 잘 작동, 나는 그것으로 아무런 문제가 없었다.

객체 영속성을 위해, 나는 node_redis를 사용하여 레디 스 지원을 추가했습니다. 그럼 추상화 계층으로 레디 스 팝 / 서브 채널과의 배열에 client.send 루프를 대체했다. 하지만 내가 구독을 만들어 각 사용자에 대해 새 레디 스 클라이언트를 만드는 데 필요한 것으로 나타났습니다. 그리고 난 아직 게시에 메시지를 보내 저장 socket.io 클라이언트 정보를 필요로했다. 그 방법은 확장 성? 다른 (더 나은) 구현 아니면 내가 만들 수있는 더 최적화가 있습니까? 당신은 무엇을 할 것인가?

해결법

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

    1.예, 당신은 모든 IO 요청에 대해 새로운 레디 스 클라이언트를 생성해야합니다. 그것은 무거운과 확장 성이 아니다. 그러나 새로운 레디 스 클라이언트 연결을 만드는 것은 많은 메모리를 소모하지 않습니다. 시스템 사용자 수는 없습니다보다 5000 이상이다 그래서 만약 그때는 괜찮습니다. 당신이 노예 레디 스 서버에 추가 할 수있는 확장하는 것은 당신이 당신이 당신의 OS ULIMIT을 높일 수있는 연결을 많이 만드는 방법에 대해 우려하는 경우 무거운 게시 및 구독하고 해결합니다.

    예, 당신은 모든 IO 요청에 대해 새로운 레디 스 클라이언트를 생성해야합니다. 그것은 무거운과 확장 성이 아니다. 그러나 새로운 레디 스 클라이언트 연결을 만드는 것은 많은 메모리를 소모하지 않습니다. 시스템 사용자 수는 없습니다보다 5000 이상이다 그래서 만약 그때는 괜찮습니다. 당신이 노예 레디 스 서버에 추가 할 수있는 확장하는 것은 당신이 당신이 당신의 OS ULIMIT을 높일 수있는 연결을 많이 만드는 방법에 대해 우려하는 경우 무거운 게시 및 구독하고 해결합니다.

    당신은 메시지하여 전송에 socket.io 클라이언트를 저장할 필요가 없습니다. 레디 스를 구독 채널 메시지를 수신하면. 또한 특정 IO 클라이언트에 메시지를 보내드립니다.

    subscribe.on("message",function(channel,message) { 
     var msg = { message: [client.sessionId, message] }; 
     buffer.push(msg);
     if (buffer.length 15) buffer.shift(); 
     client.send(msg); > });
    

    멀티 채널을 구독합니다. 나는 (당신은 저장하여 MongoDB 또는 레디 스를 사용할 수 있습니다) 두 개 이상의 채널을 모든 사용자 사전에 저장하는 것이 좋습니다.

    var store = redis.createClient();
    var subscriber= redis.createClient()
    
    store.hgetall(UID, function(e, obj){
         subscriber.subscribe(obj.ChannelArray.toArray());
     })
    
  2. ==============================

    2.나는 Faye.js.를 사용 내가 찾을 수있는 진심 간단한 술집 / 서브 구현입니다. 어쩌면이 도움이됩니다!

    나는 Faye.js.를 사용 내가 찾을 수있는 진심 간단한 술집 / 서브 구현입니다. 어쩌면이 도움이됩니다!

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

    3.레디 스 펍 / 서브와 socket.io에 관한이 질문에 살펴보십시오.

    레디 스 펍 / 서브와 socket.io에 관한이 질문에 살펴보십시오.

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

    4.또는 당신은 절대적인 힘 시도 할 수 있습니다. socket.io +를 사용하여이 술집 서브 미들웨어 + node.js.을 레디 스 모든 전송을 지원합니다. 그것은 당신이 모든 채널을 구독하거나 클라이언트와 레디 스 사이에 게시 핸들러 도움이됩니다. 저거 너트는 확장 성이 있지만, 레디 스 오버 헤드에 유일한 관심사이며 (당신이 그것에 몇 가지 트릭을 할 수 있습니다) 인증을 지원하지. 그러나 초 당 150 k는 그래서 귀하의 경우에 대한 문제가 없어야합니다> 읽기 / 쓰기 할 수 레디 스.

    또는 당신은 절대적인 힘 시도 할 수 있습니다. socket.io +를 사용하여이 술집 서브 미들웨어 + node.js.을 레디 스 모든 전송을 지원합니다. 그것은 당신이 모든 채널을 구독하거나 클라이언트와 레디 스 사이에 게시 핸들러 도움이됩니다. 저거 너트는 확장 성이 있지만, 레디 스 오버 헤드에 유일한 관심사이며 (당신이 그것에 몇 가지 트릭을 할 수 있습니다) 인증을 지원하지. 그러나 초 당 150 k는 그래서 귀하의 경우에 대한 문제가 없어야합니다> 읽기 / 쓰기 할 수 레디 스.

    https://github.com/maccman/juggernaut

  5. ==============================

    5.참고로 Socket.io의 v0.7 채널을 지원하고 기존 코드 (종속 lib에 더 이상 술집 / 하위)를 단순화한다

    참고로 Socket.io의 v0.7 채널을 지원하고 기존 코드 (종속 lib에 더 이상 술집 / 하위)를 단순화한다

    참조 : http://cl.ly/0B0C3f133K1m3j422n0K

  6. from https://stackoverflow.com/questions/5903328/pub-sub-implementation-in-nodejs by cc-by-sa and MIT license