Go
- responseを捨ててしまうと、resp.Body.Close() ができなくなるのでだめ
- 最後まで読み切ってCloseしてないとkeep-aliveしない
- for-loopの中でリクエストする場合きっちり毎回Closeする
Goのnet/httpのclientでなぜresponseBodyをClose、読み切らなくてはいけないのか
- responseBodyをCloseしないとコネクションがブロックしてしまい再利用されず、古い接続が残ったまま、新しく接続するたびに新しいGoroutineとファイルディスクリプタを作ってしまう
- responseBodyを読み切らないとkeepAliveされずコネクションが終了してしまい再利用されず、接続のたびに新しい接続を作ってしまう。
Connection re-use in Golang with http.Client - stuartleeks.com
DefaultClient
を使う:
Transport
を指定しない(DefaultTransport
が使われる):
同じ Transport
を使う:
再利用されないケース: http.Client
ごとに Transport
を作る