Как ограничить скорость передачи с помощью HttpHandler - PullRequest
1 голос
/ 06 декабря 2008

Я программирую обработчик передачи файлов с функцией ограничения скорости, скорость зависит от уровня пользователя. Как мне контролировать / рассчитывать скорость передачи в HttpHandler?.

Некоторые ресурсы asp.net говорят мне, что использование Thread.Sleep заблокирует пул потоков asp.net.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2008

Обычно плохой идеей является спящий поток из ASP .NET, потому что эти потоки могут использоваться в противном случае для обслуживания запросов из пула. Если бы было, скажем, 10 потоков в пуле, 10 спящих потоков, которые обрабатывали загрузки, заставили бы все другие запросы накапливаться в очереди до завершения загрузки.

Возможно, вам лучше всего создать IHttpAsyncHandler вместо IHttpHandler, как описано в:

http://msdn.microsoft.com/en-us/library/ms227433.aspx

Вы можете использовать таймер для периодической перекачки x байтов данных клиенту (но обязательно периодически объединяйтесь в пул для закрытого соединения, используя IsClientConnected или некоторые другие).

0 голосов
/ 06 декабря 2008

Вы можете попробовать использовать таймеры и обратный вызов таймера для этого. Идея состоит в том, чтобы иметь таймер (или, может быть, два), который срабатывает, когда ваш обработчик может работать и как долго. Каждый раз, когда истекает таймер «go», он запускает поток, который записывает ваши данные в ответ до тех пор, пока не истечет таймер «stop» (или снова не истечет тот же таймер), затем этот поток завершает то, что делал, выполняет служебную работу Следующий поток сбрасывает таймер «go» и завершает работу. Ваш основной поток устанавливает исходный таймер, данные для передачи, затем вызывает таймер и завершает работу. Предположительно, вам нужно было бы где-то хранить указатель на ответ, чтобы вы могли снова получить к нему доступ. Изменяя продолжительность времени, которое обработчик должен ждать / выполнять, вы можете контролировать, сколько ресурсов он использует.

...