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 サーバーは他のコンポーネントのメソッドを呼び出すことができます。
リーリー
###詳細###
コンポーネントがポート 12345 でネットワーク リスナーを要求したときに何が起こるかを考えてみましょう。 APIServer
コンポーネントの 2 つのコピーがポート 12345 で同時にリッスンすることはできません。そのポートでリッスンできるのは 1 つのオペレーティング システム プロセスのみです。この問題を解決するために、2 つのレプリカがランダムに選択されたポート (8000 や 9000 など) で待機します。次に、weaver multi
デプロイヤはポート 12345 で HTTP プロキシを実行し、リクエストをポート 8000 と 9000 に転送します。
アプリケーションでは、メインの Server
コンポーネントが 2 回レプリケートされ、
関数が各レプリカに対して 1 回ずつ、計 2 回実行されます。 Serve
内で apiServer.Get().Serve(context.Background())
を呼び出すと、APIServer
のコピーが実行用にランダムに選択されますServe
メソッド。運が良ければ、2 つのメソッド呼び出しが 2 つの異なるレプリカに送信され、すべてがスムーズに実行されるはずです。ただし、両方のメソッド呼び出しが同じレプリカに送信される場合、APIServer
の一方のレプリカは HTTP サーバーを実行し、もう一方のレプリカは実行していません。
この場合、プロキシはすべてのリクエストの半分を実行中の HTTP サーバーに転送し、残りの半分をリッスンされていないリスナーに転送します。これにより、プロキシ エラーが発生します。
最後に、
または
weaver singledeploy を使用してアプリケーションを実行すると、プロキシがなくコンポーネントがコピーされないため、すべてが正常に動作することに注意してください。
以上がService Weaver を使用して複数の異なるリスナーをセットアップする方法に関する質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。