2010-05-24 1 views
1

클라이언트가 토네이도를 사용하여 제공하는 파일의 다운로드를 성공적으로 완료 한 경우에만 정리 기능을 실행할 수 있기를 원합니다. 클라이언트가 토네이도 웹 서버에서 다운로드를 완료 한 후 어떻게 함수를 호출합니까?

나는 파이어 폭스 스로틀 도구를 설치하고 전화 접속 속도까지 연결을 느리게했고 쓰레기 임의의 텍스트의 무리 생성이 핸들러를 설치 :

class CrapHandler(BaseHandler): 
    def get(self, token): 
     crap = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(100000)) 
     self.write(crap) 
     print "done" 

내가 한 후 즉시 토네이도에서 다음과 같은 출력을 얻을를 요청 :

done 
I 100524 19:45:45 web:772] 200 GET /123 (192.168.45.108) 195.10ms 

그러면 클라이언트는 약 20 초 동안 다운로드를 진행합니다. 나는 클라이언트가 완료된 후에 "완료"를 인쇄 할 것으로 예상했다. 또한

, 내가 할 경우 내가 거의 동일한 결과를 얻을 다음

class CrapHandler(BaseHandler): 
    @tornado.web.asynchronous 
    def get(self, token): 
     crap = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(100000)) 
     self.write(crap) 
     self.finish() 
     print "done" 

나는 여기에 근본적인 뭔가를 놓치고 있습니까? 토네이도가 내가하려는 것을 지원할 수 있습니까? 그렇지 않다면 대안이 있습니까?

답변

1

나는 당신이 오버라이드 할 수있는 on_connection_close 요청 처리기 방법으로 실행되는 것을 찾고 있다고 생각합니다.

nginx 뒤에서 실행하면 토네이도가 즉시 nginx에 응답하고 nginx가 클라이언트에 천천히 응답합니다.

또한 @tornado.web.asynchronous을 추가한다고해서 실제로 비동기 요청을하지는 않습니다. tornado.http.AsyncHTTPClient을 사용하라는 요청 만합니다.

+0

on_connection_close가 http 킵 얼라이브를 어떻게 처리합니까? 이 경우 요청이 연결간에 계속 연결됩니까? – Shabbyrobe

관련 문제