2014-04-30 2 views
2

저는 십여 가지 요청 중 히드라 큐와 함께 Typhoeus를 사용하고 있습니다.Typhoeus를 사용하여 on_body 콜백에서 현재 요청을 중단하는 방법

응답을 스트리밍하기 위해 on_body 콜백을 사용하고 있습니다.

물론이 대기열의 다른 모든 요청을 중단하지 않고이 콜백 내부의 현재 요청을 중단하는 가장 좋은 방법은 무엇입니까 (최대 파일 크기에 도달 했습니까?).

hydra = Typhoeus::Hydra.hydra 

urls.each do |url| 
    request = Typhoeus::Request.new(url, followlocation: true, timeout: 5, connecttimeout: 5) 
    request.on_body do |chunk, response| 
    # 
    # How to conditionally abort the request here ? 
    #   
    end 

    hydra.queue request 
end 

hydra.run 

답변

3

현재로서는 방법이 없습니다. http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTWRITEFUNCTION에 따르면 잘못된 크기를 반환하면 충분합니다. 하지만 Typhoeus에서는 콜백 자체가 래핑되고 항상 올바른 크기 인 https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/callbacks.rb#L37-48을 반환하기 때문에 옵션이 아닙니다.

EDIT : Ethon 0.7.1은 on_body 콜백의 요청을 중단 할 수 있습니다 : https://github.com/typhoeus/ethon/commit/6117872004c9ed1dac0ac15542dffc10177d8eae.

+0

답변 해 주셔서 감사합니다. 내 문제는 Typhoeus와 대기열을 사용하여 콘텐츠를 제어 할 수없는 일부 URL을 크롤링한다는 것입니다. 이러한 URL 중 하나가 매우 큰 파일 인 경우 디스크에 계속 쓰지 않고 가능한 한 빨리 중단하고 싶습니다. 그걸 처리하는 가장 좋은 방법은 무엇입니까? –

+0

요청을 중단하기 위해 특별한 반환 값이있는 변경 내용을 병합합니다. like : __ abort_request. 그게 가장 쉬운 방법 인 것 같습니다. – i0rek

+0

비행 중 요청을 중단 할 수있는 Ethon 버전을 출시했습니다. https://github.com/typhoeus/ethon/commit/6117872004c9ed1dac0ac15542dffc10177d8eae – i0rek

관련 문제