SignalR: получить список клиентов для PersistentConnection - PullRequest
0 голосов
/ 20 ноября 2011

Я искал Google, SignalR wiki и сам код SignalR (например, функцию Broadcast, Signaler и т. Д.) И ничего не нашел.

Я написал ClientIDFactory и успешно установил ClientID в UserID.Это работает, но теперь пользователь не может подключиться более чем из одного браузера / вкладки.

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

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

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

Я не использую Hub.только постоянное соединение.

Спасибо,

1 Ответ

1 голос
/ 07 ноября 2017

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

Например

  1. Если вы покупаете предмет с мобильного телефона, и вы не вошли в систему (нет метаданных, относящихся к пользователю), и вы помещаете 2 предмета в свою корзину. Когда вы заходите на рабочий стол, вы не видите эти два элемента в корзине, потому что сервер не может относиться к вам как к одному и тому же пользователю, приходящему с одного компьютера.
  2. Если вы вошли в систему (метаданные, такие как электронная почта или имя пользователя, присоединенные к текущему идентификатору соединения), и вы просматриваете с мобильного и добавляете 2 товара в корзину. Когда вы входите на свой рабочий стол (новый идентификатор подключения может быть связан с тем же адресом электронной почты или идентификатором метаданных), а затем вы можете сказать, что это тот же пользователь. Если вам необходимо отправить сообщение этому пользователю, вы должны отправить его на два идентификатора клиента, что можно сделать, сгруппировав их или отправив два идентификатора.

Если клиент потерял идентификатор соединения, он должен быть отключен, и при новом соединении у него будет новый идентификатор соединения, поэтому вы должны подумать о том, чтобы отобразить их. Если я подключусь с 7 идентификаторами с 7 разных мобильных телефонов, уведомление будет отправлено всем 7, если ваша система знает, что все они являются получателями этих уведомлений. Реализация сохранения этих знаний не является частью signalR, поэтому вы должны реализовать их самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...