#c# #asp.net-mvc #signalr #signalr-hub #signalr.client
#c# #asp.net-mvc #signalr #signalr-концентратор #signalr.client
Вопрос:
Мне интересно использовать SignalR в моем веб-приложении (c #, mvc).
Сценарий: мои пользователи предоставляют мне входные данные, а я обрабатываю их и показываю им результаты. Эта обработка может быть очень долгой. Как долго? допустим, 3 минуты (в зависимости от сетевого трафика, использования, … — не может быть предопределено). В настоящее время я выполняю этот процесс в AJAX-запросе для длительного опроса. Во время выполнения AJAX я показываю на экране: «Пожалуйста, подождите».
Теперь я добавил к этому сценарию новое ограничение сервера: поскольку я использую CloudFlare, они ограничивают меня тем, что каждый запрос должен занимать менее 100 секунд. В противном случае они прерывают запрос.
Итак, я размышляю об этом и решаю проверить возможность перехода в SignalR. Почему? потому что SignalR может управлять этим длительным опросом за меня. И в основном используют другой подход (например, сокеты или другие методы), который может избежать этого ограничения сервера в 100 секунд.
Я читаю на веб-сайте SignalR, что они проверяют возможности клиента и решают, с какой технологией использовать.
Меня беспокоит: поскольку CloudFlare ограничивает запрос ответ 100 секундами, это может создать проблемы для SignalR. Допустим, мой клиент является клиентом без какой-либо новой веб-функции (например, WebSocket или другой). Это может привести к тому, что SignalR выполнит длительный опрос, который может завершиться неудачей.
Возможно ли определить SignalR, чтобы избежать длительного опроса? Или как вы рекомендуете избежать этого проблемного случая.
Комментарии:
1. Хорошим местом для начала была бы документация .
Ответ №1:
SignalR позволяет настроить максимальное количество времени, в течение которого сервер будет поддерживать запрос на длительный опрос открытым.
По умолчанию сервер SignalR закрывает запросы на опрос, которые были открыты в течение 110 секунд без получения сообщений. Конечно, если сообщение отправляется клиенту до истечения 110 секунд, запрос на опрос будет закрыт после отправки сообщения. В обоих сценариях клиент SignalR выполнит повторный опрос, когда сервер закроет предыдущий опрос (в противном случае, я думаю, это не был бы длительный опрос).
Вы можете уменьшить время ожидания по умолчанию в 110 секунд во время запуска вашего приложения с помощью IConfigurationManager.ConnectionTimeout
:
// Make long polling connections wait a maximum of 60 seconds for a
// response. When that time expires, trigger a timeout command and
// make the client reconnect.
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(60);