2008-12-06 267 views
1

我正在为具有限速功能的文件传输处理程序进行编程,速度基于用户级别。如何在HttpHandler中控制/计算传输速率?如何使用HttpHandler限制传输速率

一些asp.net资源告诉我,使用Thread.Sleep会阻塞asp.net线程池。

回答

0

你可能想尝试使用定时器和定时器回调来做到这一点。这个想法是有一个计时器(或者两个),当你的处理程序可以运行并且持续多久时触发。每当“go”计时器到期时,它会启动一个线程,将数据写入响应,直到“stop”计时器到期(或者同一个计时器再次到期),然后该线程完成正在做的事情,为下一个线程,重置“去”定时器,然后退出。您的主线程只是设置初始计时器,传输数据,然后调用计时器并退出。据推测,你需要在某个地方保持响应的句柄,以便你可以再次访问它。通过改变处理程序必须等待/执行的时间长度,您可以控制它使用的资源数量。

2

从ASP .NET中休眠任何线程通常是一个糟糕的主意,因为这些线程可能用于其他服务来处理来自池的请求。如果池中有10个线程,则处理10个正在处理下载的线程会导致所有其他请求堆积在队列中,直到下载完成。

你也许最好通过创建一个IHttpAsyncHandler而不是IHttpHandler的服务,如perscribed:

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

您可以用一个定时器x字节数据的定期泵到客户端(但可以肯定的定期使用IsClientConnected或其他方式池化一个关闭的连接)。