Socket IO Номера по умолчанию - PullRequest
0 голосов
/ 01 мая 2018

Я хотел бы создать живой центр уведомлений с помощью Web Socket в Python. У меня есть функция, которая отправляет / отправляет сообщение конкретному пользователю.

Я читал об идентификаторе сокета и комнате. Я думаю, что есть два способа прямого взаимодействия с пользователем, используя обе функции из Socket IO.

First

В документации сказано, что каждый клиент / сокет, подключенный к серверу сокетов, давал уникальный сокет # id и присоединялся к комнате, идентифицируемой по id. У меня есть идея, что мне не нужно снова создавать комнату для пользователя, и просто с помощью этой комнаты по умолчанию.

enter image description here

Используя их, я хочу создать отображение идентификатора сокета # с идентификатором пользователя (зарегистрированным идентификатором пользователя) и сохранить его в Redis. Например, если я хочу отправить сообщение с идентификатором пользователя, мне просто нужно найти его идентификатор сокета #.

Вопрос для первого способа заключается в том, будет ли идентификатор сокета # идентичным если клиент отключится и скоро снова подключится, соединение может быть установлено?

Второе:

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

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

Вопрос в том, будет ли пользователь перемещен из комнаты по умолчанию от первого пути или они будут на 2 комнаты (1 по умолчанию, 1 указанная комната по идентификатору пользователя)?

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вопрос для этого первого способа заключается в том, будет ли идентификатор сокета # идентичным, если клиент отключится и повторно подключится, как только соединение может быть установлено?

Нет. Каждое соединение получает случайно назначенный идентификатор сокета.

Вопрос в том, будет ли пользователь перемещен из комнаты по умолчанию с первого пути, или он будет в 2 комнатах (1 по умолчанию, 1 указанная комната по идентификатору пользователя)?

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

0 голосов
/ 01 мая 2018

Вот как я это делаю

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

решение для этого состоит в том, чтобы сделать объект подключенных пользователей, вы можете добавить идентификатор пользователя / имя пользователя в качестве ключа в вашем объекте и создать массив всех сокетов для этого пользователя, не забудьте удалить сокет при отключении пользователя и когда вы хотите отправить уведомление, просто зациклите массив и отправьте всем пользователям socketids

...