ホームページ  >  記事  >  バックエンド開発  >  Service Weaver を使用して複数の異なるリスナーをセットアップする方法に関する質問

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

王林
王林転載
2024-02-14 13:57:07465ブラウズ

关于如何使用 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 サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。