2008-12-06 4 views
1

속도 제한 기능을 사용하여 파일 전송 처리기를 프로그래밍합니다. 사용자 수준에 따라 속도가 달라집니다. HttpHandler에서 전송 속도를 제어/계산하는 방법은 무엇입니까?HttpHandler를 사용하여 전송 속도를 제한하는 방법

일부 asp.net 리소스를 사용하면 Thread.Sleep을 사용하면 asp.net 스레드 풀이 차단됩니다.

답변

0

이렇게하려면 타이머와 타이머 콜백을 사용해보십시오. 아이디어는 핸들러가 실행될 수있는 시간과 얼마나 오래 지속될지를 트리거하는 타이머 (또는 아마 두 개)를 갖는 것입니다. "go"타이머가 만료 될 때마다 "stop"타이머가 만료 될 때까지 (또는 동일한 타이머가 다시 만료 될 때까지) 응답에 데이터를 쓰는 스레드를 시작한 다음 해당 스레드가 수행중인 작업을 마치고 해당 스레드에 대한 가사를 수행합니다. 다음 스레드는 "go"타이머를 재설정하고 종료합니다. 주 스레드는 초기 타이머, 전송할 데이터를 설정 한 다음 타이머를 호출하고 종료합니다. 아마도 당신은 어딘가에 응답에 대한 핸들을 유지하여 다시 액세스 할 수 있어야합니다. 핸들러가 대기/실행해야하는 시간을 변경하여 사용하는 리소스의 수를 제어 할 수 있습니다.

2

ASP .NET의 모든 스레드를 잠자기하는 것은 일반적으로 좋지 않습니다. 스레드에서 풀의 요청을 처리하는 데 사용할 수 있기 때문입니다. 풀에 10 개의 스레드가 있다고 가정하면 다운로드를 처리하는 10 개의 스레드를 잠자기하면 다운로드가 완료 될 때까지 다른 모든 요청이 대기열에 쌓이게됩니다.

에 perscribed과 같이 가장 잘, 대신을 IHttpHandler의 IHttpAsyncHandler를 작성하여 제공됩니다 :

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

당신은 주기적으로 클라이언트에 X 바이트의 데이터를 펌프 타이머를 사용 (하지만 확신 할 수 있습니다 IsClientConnected 또는 일부를 사용하여 닫힌 연결을 위해 주기적으로 풀링).

관련 문제