グレースフルシャットダウンとは、サーバーを停止する際に、すべての接続を即座に切断するのではなく、まず新しいリクエストの受け付けを停止し、既に受け付けたリクエストが十分な時間をかけて処理を完了できるようにしてからサービスを終了する方法です。この方法により、リクエストが突然中断されることを防ぎ、ユーザー体験とシステムの信頼性を向上させることができます。
Salvoはグレースフルシャットダウンをサポートしており、Server
のhandle
メソッドでサーバーハンドルを取得し、stop_graceful
メソッドを呼び出すことで実現できます。このメソッドを呼び出すと、サーバーは以下の動作を行います:
以下は簡単な例です:
上記の例では:
server.handle()
でサーバーのハンドルを取得し、サーバーのライフサイクルを制御可能handle.stop_graceful(None)
でグレースフルシャットダウンを開始、None
はタイムアウト時間を設定せず、すべてのリクエストが処理されるまで待機Some(Duration)
を渡すことができ、タイムアウト後に残りの接続を強制的に閉じますこの方法は特に、コンテナ環境やクラウドプラットフォームにデプロイするアプリケーションや、ホットアップデート時にリクエストが意図せず中断されないようにする必要がある場合に適しています。