Джанго - SocketIO - NodeJS - Redis - PullRequest
       6

Джанго - SocketIO - NodeJS - Redis

0 голосов
/ 09 января 2019

Я хотел бы интегрировать Socketio django redis и nodejs. Моя проблема в том, что я не знаю, как сделать комнату специально для двух вошедших в систему пользователей.

Скажем, например, пользователь A вошел в систему, а пользователь B вошел в систему через 20 минут. Пользователь B должен автоматически войти в комнату с пользователем A, когда он нажимает на чат пользователя A.

1 Ответ

0 голосов
/ 09 января 2019

Затем вы должны сохранить имя вашей комнаты в базе данных, и когда пользователь B войдет в систему или щелкнет по комнате, он / она присоединится к этому имени комнаты. Я предпочитаю использовать случайную сгенерированную строку для названия комнаты.

io.on('connection', (socket) => {
  socket.on('join room', (data) => )
    const userA = data.userB;
    const userB = data.userA;
    const roomname = data.roomName;

    // I use mongodb
    const socketRoomName = MyRoomModel.findOne({ roomname })
      .then(response => response)
    socket.join(socketRoomName)
    // send message after user connected to rooms
    socket.to(socketRoomName).emit('online', data.message)
})

Но если вы не хотите использовать комнаты и пространство имен в socket.io, вы можете обрабатывать вход в систему и отображать их при подключении

const sessionsMap = {};

io.on('connection', (socket) => {
  // ask user id on client can be email, must unique
  socket.emit('askForUserId');

  socket.on('userIdReceived', (userId) => {
    // map userid to sessions map
    sessionsMap[userId] = socket.id;
  });

  socket.on('send', (message) => {
    const receiverId = sessionsMap[message.receiverId];
    const messageData = message.data;
    // this will send only on user with that specific user id
    socket.broadcast.to(receiverId).emit('my message', messageData);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...