Socket IO: лучший способ получить сокет конкретного подключенного клиента

Я пытаюсь создать чат-сервер, используя MEAN Stack (не используя Redis), который использует socket.io для включения чата в реальном времени. Для обмена личными сообщениями я хочу реализовать встроенную функцию «комнаты» в socket.io. Поток идет следующим образом:

Пользователь 1 хочет начать разговор с Пользователем 2, поэтому Пользователь 1 создает событие, которое перехватывает сервер. На сервере я сохраняю этот разговор в базе данных и присоединяю User1 к комнате. Если пользователь 2 находится в сети, я присоединяю пользователя 2 также к этой комнате. Для выполнения этого шага мне нужен доступ к сокету User2. После большого количества исследований я нашел этот метод для хранения «сокета» каждого подключенного пользователя в массиве (или словаре). Мне было интересно, есть ли какой-либо другой метод для извлечения сокета, кроме сохранения его в массиве.


person menirus95    schedule 06.06.2014    source источник


Ответы (2)


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

person Jujuleder    schedule 06.06.2014

Я реализовал базовый POC (доказательство концепции) пару лет назад, используя faye.

В моем случае я создал уникальный канал для активных пользователей. Имя канала было таким же, как уникальный идентификатор пользователя из mongo ( _id ). Это позволило мне отправлять сообщения правильному пользователю без необходимости хранить информацию об их подключении.

Обратите внимание, что я не проводил тестирования производительности и что вам нужно будет открыть много соединений.

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

person Yonatan Ellman    schedule 07.06.2014