sql >> Database teknologi >  >> NoSQL >> Redis

Sådan håndteres bruger- og socket-par med node.js + redis

En mere elegant løsning ville være at få hver socket til at forbinde til kanalens bruger-ID, for eksempel:

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);

Der er to ting, du skal passe på her:

  1. Sørg for, at kun bruger-ID kan oprette forbindelse til hans kanal, og bekræft dermed sessionen (læs mere her:http://www.danielbaulig.de/socket-ioexpress/ )
  2. Ved forbindelse, øg værdien for bruger-ID i redis (så du ved, at en ny forbindelse for den bruger lytter) og ved afbrydelse reduceres bruger-id-værdien (så du ved, hvor mange forbindelser der stadig lytter). Hvis værdien er 0, udsender du en besked til chatten om, at bruger-ID er forladt (da antallet af forbindelser, der lytter til bruger-ID-kanalen, er 0).

Når andre brugere ønsker at sende en besked til bruger-ID, behøver de ikke at oprette forbindelse til bruger-ID-kanalen, de kan sende en besked til chat kanal og videregive bruger-id som en egenskab. For eksempel:

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);
    }
  });



  1. Træk en post fra et array via Meteor

  2. docker:MISCONF Redis er konfigureret til at gemme RDB-øjebliksbilleder

  3. Kombinerer $regex og $or operatorer i Mongo

  4. Kører redis på nodejs Docker-billede