我正在编写一个具有速度限制功能的文件传输处理程序,该速率基于用户级别。如何在HttpHandler中控制/计算传输速率?
一些asp.net资源告诉我使用Thread.Sleep将阻止asp.net线程池。
答案 0 :(得分:2)
从ASP .NET中休眠任何线程通常是一个坏主意,因为这些线程可以用于服务池中的请求。如果说池中有10个线程,那么处理下载的10个线程就会导致所有其他请求堆积在队列中,直到下载完成为止。
您最好通过创建IHttpAsyncHandler而不是IHttpHandler来实现,如下所示:
http://msdn.microsoft.com/en-us/library/ms227433.aspx
您可以使用计时器定期将x字节的数据泵送到客户端(但请确保使用IsClientConnected或其他类似的周期性池进行关闭连接)。
答案 1 :(得分:0)
您可能希望尝试使用计时器和计时器回调来执行此操作。这个想法是有一个计时器(或两个),当你的处理程序可以运行时会触发多长时间。每次“go”计时器到期时,它会启动一个线程,将您的数据写入响应,直到“stop”计时器到期(或同一个计时器再次到期),然后该线程完成它正在做的事情,是否为下一个线程,重置“go”计时器,然后退出。你的主线程设置初始计时器,传输数据,然后调用计时器并退出。据推测,您需要在某处保留响应的句柄,以便您可以再次访问它。通过改变处理程序必须等待/执行的时间长度,您可以控制它使用的资源数量。