目次
質問内容
デプロイヤは各コンポーネントを 2 回コピーし、各コピーは独自のオペレーティング システム プロセスで実行されます。
ホームページ バックエンド開発 Golang Service Weaver を使用して複数の異なるリスナーをセットアップする方法に関する質問

Service Weaver を使用して複数の異なるリスナーをセットアップする方法に関する質問

Feb 14, 2024 pm 01:57 PM

关于如何使用 Service Weaver 设置多个不同侦听器的问题

php エディタ Xiaoxin は、Service Weaver を使用して複数の異なるリスナーを設定する方法を紹介します。 Service Weaver は、開発者が複数のサービスを作成および管理できるようにする強力なツールです。異なるリスナーを設定することで、異なるサービスを監視および管理できます。この記事では、Service Weaver を使用して複数の異なるリスナーを構成および管理し、サービスをより適切に制御および最適化する方法について詳しく説明します。初心者でも経験豊富な開発者でも、この記事では詳細なガイダンスと実用的なヒントを提供します。一緒に探検しましょう!

質問内容

リリースされたService Weaverをしばらく使っているのですが、これを使って複数のリスナーを設定するにはどうすればよいのか興味がありました。私の意図は、アプリケーションをデプロイするときに、web のハンドラーと api のハンドラーが (例として) 別々に実行されることです。私のコードは現在次のようになります:

リーリー

基本的には、コンポーネントごとに 1 つずつ、合計 2 つの Echo サーバーをセットアップするだけです。

価値があるものとして、これが私の構成です:

リーリー

単一プロセスで実行すると、すべてが期待どおりに動作しているように見えます。ネットワーク リクエストのログ エントリが表示され、すべてが正常であることがわかります。デプロイ モードで実行すると (つまり、実際にマルチプロセス マジックを実行すると)、次のようなログ エントリが表示されるまでに 1 ~ 2 件のリクエストしか実行できず、応答が頻繁に機能しません。 リーリー

何か間違っているように見えますが、これは何とかサポートされそうなユースケースのようですので、この問題を解決する適切な方法があるかどうか疑問に思っています。

###ありがとう!

回避策

tl;dr

Service Weaver 現在、非プライマリ コンポーネントから HTTP サーバーを実行する良い方法はありません。 2 つのリスナーを Server 構造に移動し、Serve 関数内で 2 つの HTTP サーバーを実行することをお勧めします。 HTTP サーバーは他のコンポーネントのメソッドを呼び出すことができます。 リーリー ###詳細###

weaver multi

デプロイヤは各コンポーネントを 2 回コピーし、各コピーは独自のオペレーティング システム プロセスで実行されます。

APIServer

コンポーネントがポート 12345 でネットワーク リスナーを要求したときに何が起こるかを考えてみましょう。 APIServer コンポーネントの 2 つのコピーがポート 12345 で同時にリッスンすることはできません。そのポートでリッスンできるのは 1 つのオペレーティング システム プロセスのみです。この問題を解決するために、2 つのレプリカがランダムに選択されたポート (8000 や 9000 など) で待機します。次に、weaver multi デプロイヤはポート 12345 で HTTP プロキシを実行し、リクエストをポート 8000 と 9000 に転送します。 アプリケーションでは、メインの Server コンポーネントが 2 回レプリケートされ、

Serve

関数が各レプリカに対して 1 回ずつ、計 2 回実行されます。 Serve 内で apiServer.Get().Serve(context.Background()) を呼び出すと、APIServer のコピーが実行用にランダムに選択されますServe メソッド。運が良ければ、2 つのメソッド呼び出しが 2 つの異なるレプリカに送信され、すべてがスムーズに実行されるはずです。ただし、両方のメソッド呼び出しが同じレプリカに送信される場合、APIServer の一方のレプリカは HTTP サーバーを実行し、もう一方のレプリカは実行していません。 この場合、プロキシはすべてのリクエストの半分を実行中の HTTP サーバーに転送し、残りの半分をリッスンされていないリスナーに転送します。これにより、プロキシ エラーが発生します。 最後に、

go run

または

weaver singledeploy

を使用してアプリケーションを実行すると、プロキシがなくコンポーネントがコピーされないため、すべてが正常に動作することに注意してください。

以上がService Weaver を使用して複数の異なるリスナーをセットアップする方法に関する質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

Goでユニットテストをどのように書きますか? Goでユニットテストをどのように書きますか? Mar 21, 2025 pm 06:34 PM

Goでユニットテストをどのように書きますか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

See all articles