Как сохранить socket.id через несколько серверов nodejs и socket.io

#mysql #node.js #mongodb #redis #socket.io

#mysql #node.js #mongodb #redis #socket.io

Вопрос:

Каков наилучший способ хранения пользовательских socket.id на нескольких серверах? Возьмем, к примеру, простое приложение для чата, если два пользователя на разных серверах отправляют сообщения друг другу, два сервера должны где-то хранить идентификатор сокета каждого пользователя, чтобы они могли отправлять сообщения от одного пользователя другому.

В настоящее время я использую хэш redis для хранения идентификатора сокета каждого пользователя (если они подключены к Сети), но это не работает, если у пользователя два соединения (например, у них открыты две вкладки приложения для чата). Является ли лучшим подходом продолжать использовать redis, но реструктурировать структуру данных таким образом, чтобы она работала, когда пользователь подключается дважды, или было бы лучше перейти на что-то вроде mongodb или mysql?

Мне также хотелось бы найти способ истечения срока действия данных, например, если идентификатор сокета хранится более 24 часов, тогда он должен быть автоматически удален. Я рассматривал возможность сделать это с помощью redis, но, похоже, невозможно удалить только одну пару внутри хэша. Истекающие данные — это то, что можно сделать в mysql или mongodb?

Ответ №1:

Вы пробовали сокет-номера?

проверьте эту ссылку для комнат и пространств имен

например, если у пользователя несколько подключений, присоединитесь к ним в комнате с уникальным именем (возможно, идентификатором пользователя или чем-то еще)

Комментарии:

1. Спасибо, это гораздо более чистый и простой способ сделать что-то, чем хранить идентификаторы socketIds в хэше redis.