#signalr #signalr-hub #signalr.client
Вопрос:
Если я скажу закрыть крышку на своем ноутбуке на несколько часов, и я запущу приложение с помощью SignalR, то серверный концентратор попытается отправить сообщение на это соединение. Что произойдет, получит ли a исключение из моего сообщения SendMessage? Когда я открою крышку ноутбука, будет ли мой идентификатор подключения по-прежнему действителен и будет иметь то же значение?
Ответ №1:
В дополнение к ответу eglease имеет значение, какая версия у вас запущена и какой браузер. Если вы используете ASP.NET Клиент SignalR 2.4.1 или более ранней версии и Chrome в качестве браузера у вас будет 5-минутное окно, прежде чем Chrome завершит работу, поскольку соединение активно не используется. То же самое произойдет, если вы просто откроете другую вкладку, а ваш клиент окажется на несфокусированной вкладке.
Это было исправлено в выпуске 2.4.2 еще в апреле, чтобы предотвратить проблему.
Ответ №2:
Это зависит от того, что происходит с вашим ноутбуком, когда вы закрываете крышку.
Если у вас отключен режим презентации или режим сна, ничего не должно произойти. Клиент продолжит работать по — прежнему и получать сообщения. ConnectionID
ничего бы не изменилось.
Если ваш ноутбук переходит в спящий режим и/или отключает сеть или клиент SignalR перестает работать, сервер отключится после тайм-аута и попытается подключиться повторно. Клиент не будет получать пропущенные сообщения, если у вас нет собственной логики для отслеживания того, какие сообщения были получены и какие необходимо отправить повторно. На уровне приложений не должно быть никаких исключений, но если вы посмотрите на трассировку SignalR, то увидите исключение в самой библиотеке. Это нормально.
ConnectionID
зависит от того, сколько времени потребуется клиенту, чтобы вернуться. Это останется неизменным в течение короткого периода времени, если OnReconnect()
сработает. Если отключение длится дольше и OnDisconnect()
срабатывает, ConnectionID
оно будет другим, поскольку клиенту потребуется повторно подключиться вручную (новое соединение).
Примечание: Сигнал для ASP.NET имеет некоторую логику повторной отправки и буферизации, но она не сильно буферизует и плохо работает. По этой причине он был удален в SignalR для .NET Core.
Если вам нужна функция повторной отправки, взгляните на NATS.io.
TLDR; Не исключение, но новое CustomerID
, если период отключения достаточно продолжителен для OnDisconnect()
запуска на сервере.