Skip to content
This repository has been archived by the owner on Aug 31, 2022. It is now read-only.

Plum::Client (日本語)

rhenium edited this page Nov 8, 2015 · 2 revisions

同期的なリクエスト

client = Plum::Client.start("http2.rhe.jp", 443)
res = client.post("/inspect", "data", headers: { "user-agent" => "plum-clinet" }) # リクエストが完了(レスポンスボディの受信が完了)するまでブロックする
client.close # 即座に(async リクエストの完了を待たずに)GOAWAY フレームを送信し HTTP/2 コネクションを切断する
p res.finished? # => true レスポンスボディの受信が完了した
p res.status # => "200"
p res.headers # => { ":status" => "200", "server" => "Plum/0.1.3", ... }

並列リクエスト

responses = Plum::Client.start("http2.rhe.jp", 443) { |client|
  10.times.map { |i|
    client.get_async("/inspect?arg=#{i}", headers: { "cookie" => "a=b" })
  }
} # ブロック内で発行されたリクエストの完了を待ち HTTP/2 コネクションを切断する
responses.each do |res|
  p res.body
end

非同期・並列リクエスト

puts "start"
Plum::Client.start("http2.rhe.jp", 443) { |client|
  client.get_async("/sleep?sec=0.5") { |res| # レスポンスヘッダを受信した際にコールバックされる
    puts "sleep0.5: headers"
    res.on_chunk { |chunk|
      # DATA フレームを受信した際にコールバックされる
    }
  }
  client.get_async("/sleep?sec=3") { |res|
    puts "sleep3: headers"
  }
}
# =>
# 00:00.0) start
# 00:00.5) sleep0.5: headers
# 00:03.0) sleep3: headers
Clone this wiki locally