ホームページ  >  記事  >  バックエンド開発  >  ワーカーと HTTP サーバーが正常にシャットダウンされました

ワーカーと HTTP サーバーが正常にシャットダウンされました

WBOY
WBOY転載
2024-02-15 14:48:071031ブラウズ

Worker 和 HTTP 服务器正常关闭

php エディタ Xigua は、この記事でワーカーと HTTP サーバーの通常のシャットダウンについて紹介します。開発プロセス中は、ワーカーと HTTP サーバーを正しくシャットダウンして、リソースが解放され、プログラムが正常に終了することが非常に重要です。この記事では、ワーカーと HTTP サーバーを正しくシャットダウンする方法と、いくつかの一般的な問題と解決策について詳しく説明します。サーバーを正常にシャットダウンし、アプリケーションの安定性と信頼性を向上させる方法を一緒に学びましょう。

質問内容

独立して起動し、終了をリッスンして完了時に正常に終了するワーカープロセスとhttpサーバーを作成しようとしています。

何らかの理由で、ワーカー スレッドは開始されますが、http サーバーは sigterm イベントが送信されるまで開始されません。 http サーバーは、sigterm イベントの送信後にのみ起動します。以下の問題は何でしょうか?

###出力### リーリー ###コード###
https://gosamples.dev is the best
https://gosamples.dev is the best
https://gosamples.dev is the best
^c2023/05/27 15:07:52 listening on http server port:

process finished with the exit code 0

回避策

コードを正しく読めば、ルート ハンドラーを定義する前にサーバーが起動していることになります。これは、サーバーが起動するときに、/readiness

および

/liveness

エンドポイントがまだ追加されていないため、サーバーがそれについて認識しないことを意味します。その結果、サーバーは起動しますが、処理するルートがないため、何も行われません。 その後、http.server インスタンスに

addr

フィールドを定義しません。 listenandserve() は、それを呼び出す http.server インスタンスの addr フィールドで定義されたアドレスを使用します。空の場合、デフォルトは ":http" ですが、これはコード内で明示的に指定されていないため、混乱を招く可能性があります。 srv.listenandserve を startserver の最後に移動しました。私は何を取りこぼしたか?

問題は、関数内の srv.listenandserve がどこにあるかではなく、

http.server

がどのように構成され、いつ http ハンドラーが設定されるかです。 元のコードでは、サーバーの起動後に http ハンドラーを設定します。サーバーが実行されると、後で定義された新しいハンドラーは選択されないため、サーバーを開始する前にハンドラーを設定する必要があります。 そして、ログ ステートメント

log.printf("listening on http server port: %s", srv.addr)

srv.listenandserve()

の後にあります。これは通話をブロックします。これは、ログ ステートメントがサーバーの停止後にのみ実行されることを意味します。そのため、ログ ステートメントは sigterm シグナルの送信後にのみ表示されます。 次のように startserver 関数を再編成してみてください:

リーリー

startserver 関数の修正バージョンでは、サーバーの起動前に定義されているため、サーバーは

/readiness

および /liveness エンドポイントを認識できるようになりました。 。 http ハンドラーはサーバーの起動前に設定され、ログ ステートメントはサーバーの起動前に出力されます。これにより問題が解決され、サーバーが期待どおりに起動してリクエストを処理できるようになります。さらに、addr が明確に定義されているため、サーバーはどこでリッスンするかを認識します。

以上がワーカーと HTTP サーバーが正常にシャットダウンされましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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