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
エンドポイントがまだ追加されていないため、サーバーがそれについて認識しないことを意味します。その結果、サーバーは起動しますが、処理するルートがないため、何も行われません。
その後、http.server
インスタンスに
フィールドを定義しません。 listenandserve()
は、それを呼び出す http.server
インスタンスの addr
フィールドで定義されたアドレスを使用します。空の場合、デフォルトは ":http"
ですが、これはコード内で明示的に指定されていないため、混乱を招く可能性があります。
srv.listenandserve
を startserver の最後に移動しました。私は何を取りこぼしたか?
問題は、関数内の srv.listenandserve
がどこにあるかではなく、
がどのように構成され、いつ http ハンドラーが設定されるかです。
元のコードでは、サーバーの起動後に http ハンドラーを設定します。サーバーが実行されると、後で定義された新しいハンドラーは選択されないため、サーバーを開始する前にハンドラーを設定する必要があります。
そして、ログ ステートメント
は
srv.listenandserve() の後にあります。これは通話をブロックします。これは、ログ ステートメントがサーバーの停止後にのみ実行されることを意味します。そのため、ログ ステートメントは sigterm シグナルの送信後にのみ表示されます。
次のように startserver
関数を再編成してみてください:
startserver
関数の修正バージョンでは、サーバーの起動前に定義されているため、サーバーは
および /liveness
エンドポイントを認識できるようになりました。 。
http ハンドラーはサーバーの起動前に設定され、ログ ステートメントはサーバーの起動前に出力されます。これにより問題が解決され、サーバーが期待どおりに起動してリクエストを処理できるようになります。さらに、
addr が明確に定義されているため、サーバーはどこでリッスンするかを認識します。
以上がワーカーと HTTP サーバーが正常にシャットダウンされましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。