Может ли SignalR обрабатывать пропущенные сообщения?

Скажем, мое сетевое подключение прерывается на несколько секунд, и я пропускаю некоторые отправленные сервером SignalR сообщения.

Когда я восстанавливаю подключение к сети, теряются ли сообщения, которые я пропустил? или signalR обрабатывает их и выталкивает при повторном подключении?

Если он не может обрабатывать пропущенные сообщения, то каков рекомендуемый подход для обеспечения согласованности?

  • Периодически (2-3 минуты) опрос для проверки серверных данных?
  • Как-то обнаружить потерю сети на стороне клиента и сделать ajax-вызов, чтобы получить данные о восстановлении сети?
  • что-то другое?

person reach4thelasers    schedule 23.04.2012    source источник


Ответы (1)


Вот пара мыслей:

Если вы не отправляете много сообщений в секунду, подумайте о том, чтобы не отправлять данные в самих сообщениях. Вместо этого сообщение представляет собой просто «пинг» для клиентов, говорящий им, что нужно получить данные сервера, когда они смогут. Объедините это с периодическим опросом, как вы сказали, и вы можете быть уверены, что не пропустите сообщения. Просто они могут задержаться.

Если вы быстро отправляете много сообщений, как насчет добавления последовательного идентификатора к каждому из них? Подумайте о столбце SQL Identity. Ваши клиенты должны будут отслеживать самый последний полученный идентификатор. После повторного подключения к сети клиент может запросить все сообщения с момента [Последний идентификатор]. Если получено сообщение, идентификатор которого не совпадает с идентификатором самого последнего полученного сообщения, вы знаете, что произошло отключение, и можете запросить у сервера недостающую информацию.

person MikeC    schedule 26.04.2012
comment
Интересная идея, мне нравится вторая, хотя было бы неплохо, если бы SignalR дополнил эту функциональность для нас... возможно, в более поздней версии, я думаю! - person reach4thelasers; 27.04.2012
comment
Я понимаю, чего вы хотите, но идея обмена сообщениями — выстрелил и забыл. Так что я не считаю это основной частью signalR. Я согласен с обходным путем, который @MikeC предлагает как хороший вариант. - person John Papa; 27.04.2012
comment
Есть ли у нас какая-либо опция или функция для случайного включения и выключения, например, отбрасывания сообщений в SignalR? - person Kurkula; 04.05.2016