Как отправлять разные уведомления разным пользователям, используя socket.io - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок в socket.io и ознакомился с основными соединениями. Но я хотел бы знать, как отправлять разные уведомления разным пользователям. Например, есть пользователи от 1 до 4 и категории A до D . Каждый пользователь может быть подписан на разные категории. См. Таблицу ниже

USER   | CATEGORY
1      | A
2      | A
4      | A
2      | B
4      | B
1      | C
2      | C
3      | C
4      | C
3      | D
4      | D

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

Любая помощь будет очень полезна. Спасибо.

1 Ответ

0 голосов
/ 07 ноября 2019

Если вы хотите избежать использования отдельных комнат, вы можете просто отслеживать соединения самостоятельно. Вы можете сделать что-то вроде этого

var clients = [];
io.sockets.on('connection', function(socket) {
   clients.push({     //Store information on the client when they connect
      id: socket.id,
      conn: socket,
      category: []
   });
   socket.on('disconnect', function() {
      clients = clients.filter(client => client.id != socket.id);  //Remove the disconnecting client
   });
});

Затем, если у вас есть эта настройка, когда вы хотите обновить категорию, вы можете сделать это:

function updateCat(categoryName, updateData){
   clients.forEach(client => {
      if(client.category.includes(categoryName)){   //Check if the client is subscribed
         client.conn.emit('category_update', updateData);
      }
   });
}

Это возможное решение по сравнению с использованием комнат, если у вас есть какие-либо вопросы, дай мне знать.

...