복붙노트

[REDIS] Node.js를 + 레디 스에 사용자와 소켓 쌍을 처리하는 방법

REDIS

Node.js를 + 레디 스에 사용자와 소켓 쌍을 처리하는 방법

스트레이트 포인트 : 나는, Node.js를 사용하고 Socket.IO에 전용 채팅 시스템 레디 스.

접속 사용자에 Node.js를 서버에 자신의 웹 사이트 ID (아이디)를 전달합니다. 어떻게 든 (각 연결의) socketID 및 사용자 ID를 페어링 그래서 그는 여러 개의 연결을 가질 수있다. 나는 userID-> sessionID와 쌍을 저장하는 레디 스를 사용하는 방법에 대해 생각했다. 그러나 사용자의 연결을 끊 내가 레디 스에서 해당 쌍을 제거해야합니다 ..하지만 난 그 키를 선택할 수 있도록 난 단지 사용자 ID하지 socketID 때 ..

지금, 나는이 잘못된 방향으로 접근하고 또는 둘 다 userID-> socketID 및 socketID-> 아이디 쌍을 저장해야? 어쩌면 누군가가 더 우아한 솔루션을 제공 할 수 있을까?

해결법

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

    1.더 우아한 해결책은 예를 들어, 채널 아이디로 각 소켓에 연결할 수 있도록하는 것입니다 :

    더 우아한 해결책은 예를 들어, 채널 아이디로 각 소켓에 연결할 수 있도록하는 것입니다 :

    io.sockets.on('connection', function (socket) {
      socket.join(userID);
    });
    
    // when you want somebody to send a message to userID you can do:
    io.sockets.in(userID).emit(message);
    

    당신이 알아서해야 할 두 가지가 있습니다 :

    다른 사용자가 사용자 ID에 메시지를 보낼 때, 그들은 사용자 아이디 채널에 연결할 필요가 없습니다, 그들은 채팅 채널에 메시지를 보내 속성으로 사용자 ID를 전달할 수 있습니다. 예를 들면 :

    var chat = io
      .of('/chat')
      .on('connection', function (socket) {
        // connected to public chat
      })
      .on('message', function (data) {
        if (data.userID && data.message) {
          io.sockets.in(userID).emit('UserX: ' + data.message);
        }
      });
    
  2. from https://stackoverflow.com/questions/8567015/how-to-handle-user-and-socket-pairs-with-node-js-redis by cc-by-sa and MIT license