Насколько полезен Response.IsClientConnected?

Мне было интересно, есть ли у кого-нибудь опыт, которым они могли бы поделиться, используя свойство Response.IsClientConnected в качестве оптимизации производительности для веб-сайтов asp.net.

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

Ответ 1

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

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

Примечание. Я никогда не использовал это раньше, это основано на моем самом основном понимании того, что я прочитал.

Ответ 2

Я использовал это широко в своих приложениях, и это может дать вам огромную экономию ресурсов.

Попробуйте это: создайте страницу, для которой нужно -долгое время завершить, и попробуйте обновить ее много раз, прежде чем она завершится. Вы увидите, что запросы поставлены в очередь для выполнения. Представьте, что пользователь имеет медленное соединение и многократно обновляет свою страницу, думая, что это приведет к просмотру страницы (очень распространенная проблема, из-за которой сайт может погибнуть из-за того, что все пользователи подключены, и по какой-то причине он становится медленным).

Теперь измените его и в начале загрузки каждой страницы (или, скорее, на странице init) проверьте, является ли HttpContext.Current.Response.IsClientConnected и в случае, если он не связан, выдает исключение threadabord. Вы увидите, что ваш сайт ответит намного раньше.

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