Go の http.Get、同時実行、およびピアによる接続のリセット
質問:
Web ページを効率的にダウンロードするために Go ルーチンとチャネルを利用しているときに、一部のリクエストが「接続がリセットされました」というメッセージで失敗するのはなぜですか?別の大陸のサーバーから実行すると、「peer」エラーが発生しますか?
回答:
「peer によって接続がリセットされました」エラーは、リモート サーバーが意図的または非自発的であることを示します。リソース制限または過剰な接続開始により、接続が終了されました。この問題に対処するには:
1.同時実行レベルの最適化:
多数の並列接続 (1000 ~ 2000) を開始する代わりに、さまざまな同時実行レベルを試して、最も効率的な数を決定します。同時実行性が高すぎると、接続がリセットされる可能性があります。
2. Set Transport.MaxIdleConnsPerHost:
同時実行レベルに対応するように Transport.MaxIdleConnsPerHost 値を構成します。この値が同時接続の数より小さい場合、リクエストのたびにサーバー接続が閉じられ、再度開く必要がある可能性があります。この繰り返しの開閉プロセスによって進行が遅くなり、サーバー接続の制限を超える可能性があります。
3.接続開始の遅延:
MaxIdleConnsPerHost を適切に設定しても問題が解決しない場合は、サーバーからの接続リセットのトリガーを避けるために、接続開始の間にわずかな遅延を導入することを検討してください。
以上が大陸全体で Go の「http.Get」リクエストが「ピアによる接続リセット」エラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。