最近のアプリケーションでは、単一のサーバーがすべてのリクエストを処理することはほとんどありません。多くの場合、連携するために複数のサーバーが使用されます。これは、トラフィックが大きすぎて処理できないリクエストが多すぎるため、またはビジネス ロジックが分離されていることが原因である可能性があります。これは、サーバー間の通信を調整するメカニズムが必要であることを意味します。
HTTP 転送が解決策です。これは、あるサーバーから別のサーバーにリクエストを転送するのに役立ちます。これにより、既存のアプリケーション コードを変更することなく、負荷分散と効率の向上が可能になります。
今回はGo言語を使ったHTTP転送プログラムの書き方を紹介します。 Go の標準ライブラリを使用して HTTP リクエストをリッスンし、上流のサーバーに転送する方法を学びます。
準備
簡単な HTTP 転送プログラムを実装するには、Golang をインストールする必要があります。 Golang はコンパイル言語であり、コンパイル速度が非常に速く、豊富な標準ライブラリも提供します。 Golang の公式 Web サイトにアクセスして、Golang をダウンロードしてインストールできます。
ステップ 1: 依存関係をインストールする
Go 言語を使用して開発する場合、使用できるサードパーティ ライブラリが多数あります。コマンドライン命令を使用して、国内のミラーサイトから必要な依存関係をダウンロードできます。これにより、開発プロセスがスピードアップします。依存関係をダウンロードするコマンドは次のとおりです:
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct
上記のコマンドを実行した後、順調に開発を進めることができます。
ステップ 2: フォワーダーの作成
次のコードを使用して、基本的な HTTP フォワーダーを作成できます:
package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Hello world") }) http.ListenAndServe(":8080", nil) }
このアプリケーションは、ポート 8080 ですべての HTTP リクエストをリッスンします。 http.HandleFunc
メソッドを使用して HTTP リクエストを処理します。どのリクエストに対しても、応答に「Hello world」が書き込まれます。これは非常に単純な例ですが、Go 言語を使用して HTTP サーバーを構築する方法を理解するのに役立ちます。
ステップ 3: HTTP リクエストを転送する
HTTP リクエストを転送する機能を実現するには、前のステップのコードを変更する必要があります。受信したリクエストを上流サーバーに転送する必要があります。リクエストの処理方法を変更することで、上流のサーバーにリクエストを転送する機能を実装します。変更されたコードは次のとおりです。
package main import ( "fmt" "net/http" "net/http/httputil" "net/url" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { proxy := httputil.NewSingleHostReverseProxy(&url.URL{ Scheme: "http", Host: "127.0.0.1:8081", }) proxy.ServeHTTP(w, req) }) http.ListenAndServe(":8080", nil) }
この例では、httputil.NewSingleHostReverseProxy
メソッドを使用してプロキシ オブジェクトを作成します。このオブジェクトは、HTTP リクエストを上流のサーバーに転送できます。上流サーバーのアドレスとポート (127.0.0.1:8081
) も指定する必要があります。最後に、proxy.ServeHTTP
メソッドを使用して HTTP リクエストを転送します。
上記の例のコードは非常にシンプルで理解しやすいです。この例を通じて、Go 言語標準ライブラリの httputil
パッケージを使用して HTTP 転送を実装する方法を学習できます。
概要
この記事では、Go 言語の標準ライブラリを使用して HTTP 転送を実装する方法を紹介しました。これを行う方法を示す簡単な例を提供しました。コードは、より複雑なビジネス シナリオに適応するように変更できます。 Go は非常に柔軟で強力なプログラミング言語として、Web 開発、クラウド コンピューティング、ネットワーク プログラミング、その他の分野で広く使用できます。この記事がお役に立てば幸いです。
以上がgolang http 転送の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。