Отправить сообщение через Socket.IO всем подписчикам - PullRequest
0 голосов
/ 20 января 2020

Я реализовал соединение socket.io в своем приложении Swift. Я использую сервер node.js на сервере. Теперь я могу отправлять сообщения указанному пользователю c, например:

let connectedClients = new Map();
if(connectedClients.has("1")) {
    var socketInformation = connectedClients.get("1") // for userID 1
    var socketID = socketInformation.client.id
    io.sockets.connected[socketID].emit('message', req.query.message)
} 

По сути, connectedClients содержит пары ключ-значение, такие как userID:socketID.

Что я хочу Что делать дальше, это отправлять сообщение всем моим подписчикам, когда я публикую обновление. Поэтому, когда я публикую обновление, я добавляю его в свою базу данных MySQL, но для пользователей, которые находятся в сети, я хочу отправить обновление в режиме реального времени на их экран. Как я могу go об этом?

Мне кажется, у меня есть три варианта:

  • Я перебираю все подключенные клиенты и проверяю, являются ли они моими последователями;
  • Я перебираю всех своих подписчиков и проверяю, есть ли они на карте;
  • Я создаю "комнату" для всех подписчиков каждого пользователя и отправляю сообщение в эту комнату.

Но я чувствую, что должен быть лучший путь. Какие-либо предложения? Кроме того, мне интересно, является ли моя карта (connectedClients) отличным способом для хранения текущих подключенных устройств.

1 Ответ

0 голосов
/ 21 января 2020

Вы пробовали io.sockets.emit(...)? Я имею в виду:

const wsServer = require('socket.io');

let io = wsServer(webSocketsPort);
io.sockets.emit('your-event', () => 'hello, clients!');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...