2013-11-14 3 views
0

HTTP 세션이 끝나기 전에 그리고 전체 결과가 서버에서 페치되기 전에 어떤 패턴이 HTTP 응답으로부터 일치 할 때 어떤 루비 라이브러리가 시작될 수 있습니까?응답이 완료되기 전에 HTTP 응답에 반응합니까?

의사 코드 :

http.get 'http://example.org/foo.json' do |response| 
    run_this_function if /\"field\":\"data\"/ =~ response.body_str 
end 

내가 odoe.js 비슷한하지만 루비를 원한다.

+0

레일에서 실행 중이거나 그냥 루비에서 뛰고 있습니까? – sabrams

+0

그냥 루비. 나는 http 클라이언트를 쓰고있다. – pkhamre

답변

2

일반적으로 Net :: HTTP는 전체 본문을 메모리로 가져 오지만 해당 동작을 스트리밍으로 변경할 수 있습니다. the documentation에서 :

스트리밍 응답 Bodies¶ ↑

기본 순으로 :: HTTP 메모리로 전체 응답을 읽습니다. 대용량 파일을 처리하거나 진행 막대를 구현하려는 경우 본문을 IO에 직접 스트리밍 할 수 있습니다.

uri = URI('http://example.com/large_file') 

Net::HTTP.start(uri.host, uri.port) do |http| 
    request = Net::HTTP::Get.new uri 

    http.request request do |response| 
    open 'large_file', 'w' do |io| 
     response.read_body do |chunk| 
     io.write chunk 
     end 
    end 
    end 
end 

당신은 당신의 코드가 read_body 블록에서 야영을 할 수 있습니다. 당신이 알아야 할 추가 정보가 그대로 read_body에 대한 문서를 볼 수 있지만, 기본적으로는 말한다 : 블록이 주어

경우, 몸으로, 블록에 전달하고, 몸이 조각에 제공 소켓에서 읽습니다.

관련 문제