Когда происходит повторное подключение к сигналу? - программирование
Подтвердить что ты не робот

Когда происходит повторное подключение к сигналу?

Я начал работать с SignalR и пытался выяснить, когда возникает Hub Reconnect. Я не нашел удовлетворительного объяснения в Интернете. Может ли кто-нибудь объяснить, когда/почему происходит повторное подключение?

4b9b3361

Ответ 1

Повторное подключение концентратора происходит, когда клиент переходит в автономный режим, а затем восстанавливает соединение вскоре после этого. Значения конфигурации SignalR во многом определяют временные метки следующих примеров, поэтому не принимайте время дословно.

Вот несколько примеров и их результаты (формат времени m: ss), включающий повторное подключение:

Когда я упоминаю следующее, я имею в виду метод Hub на стороне сервера

  • OnConnected
  • OnDisconnected
  • OnReconnected

1)
0:00 - Клиент подключается к серверу, запускается OnConnected
0:10 - Клиент теряет соединение из-за проблем с провайдером (и понимает, что он теряет соединение)
0:15 - Клиент восстанавливает связь
0:16 - инициировано событие OnReconnected

2)
0:00 - Клиент подключается к серверу, запускается OnConnected
0:10 - Клиент теряет соединение из-за вытягивания сетевого кабеля (не понимает, что он отключен)
0:15 - Клиент восстанавливает связь
Здесь могут произойти две вещи

A: 0:16 - Ничего не происходит, и клиент продолжает свое предыдущее соединение
B: 0: ~ 45 - Клиент понимает, что отключен *
B: 0:46 - Клиент переходит в состояние повторного подключения
B: 0:47 - Клиент успешно восстанавливает соединение и запускается событие OnReconnected.

3)
0:00 - Клиент подключается к серверу, запускается OnConnected
0:10 - Клиент теряет соединение из-за вытягивания сетевого кабеля (не понимает, что он отключен)
0: ~ 45 - Клиент понимает, что он отключен *
0:46 - Клиент переходит в состояние повторного подключения
1:15 - Сервер определяет, что клиент слишком долго ушел, а затем забыл об этом, поставив в очередь команду "отключить" для получения клиентом, если он немного позже подключится. ***
1:15 - запускается OnDisconnected
1:16 - Клиент восстанавливает связь
1:17 - Клиент выполняет "мягкое" повторное подключение (не вызывает OnReconnected)
1:18 - Клиент получает команду "отключить"
1:19 - Клиент вызывает "стоп" и выполняет мягкое отключение (не вызывает OnDisconnected)

4)
0:00 - Клиент подключается к серверу, запускается OnConnected
0:10 - Клиент теряет соединение из-за вытягивания сетевого кабеля (не понимает, что он отключен)
0: ~ 45 - Клиент понимает, что он отключен *
0:46 - Клиент переходит в состояние повторного подключения
1:15 - Сервер определяет, что клиент слишком долго ушел, а затем забыл об этом, поставив в очередь команду "отключить" для получения клиентом, если он немного позже подключится. ***
1:15 - запускается OnDisconnected
1:30 - Клиент перестает пытаться подключиться (слишком долго пытается) **
1:30 - Клиент переходит в отключенное состояние.

* В связи с проверкой на стороне клиента проверьте: используется, чтобы определить, когда клиент находится в автономном режиме из-за отсутствия поддержки. Не используется для долгого опроса транспорта

** Из-за таймаута отключения соединения на стороне клиента: используется, чтобы определить, когда клиент повторно соединяется в течение слишком длительного периода, и, скорее всего, сервер забыл о клиенте в течение времени

*** Из-за тайм-аута отключения сервера: используется для определения того, когда клиент должен быть забыт. Это промежуток времени, который начинает нарастать, как только соединение помечено как мертвое на сервере. В конечном счете сервер ставит в очередь команду disconnect для темы клиента, которая сообщает клиенту (если он повторно подключается), что ему нужно запустить новое соединение. Команда исчезнет с сервера при очистке темы.

Надеюсь, это поможет!