فریمورک Iris پشتیبانی از خاموشی حمایتی را دارد. در سناریوهای واقعی کسب و کار، هنگامی که میخواهیم برنامه وب را دوباره راهاندازی یا ببندیم، مستقیماً اجبار فرآیند Go به خاموشی میتواند به راحتی منجر به پایان نیمه کاره برخی فرایندهای کسب و کار شود، منجر به استثنائات کسب و کار. روش بهتر این است که جلوی پذیرش درخواستهای جدید گرفته شود، اجازه داده شود که درخواستهای در حال انجام ادامه یابند و سپس فرآیند Go از کار بیافتد.
شما میتوانید از چند روش برای انجام خاموشی حمایتی یا راهاندازی دوباره استفاده کنید. همچنین میتوانید از بستههای شخص ثالث ساخته شده بهصورت خاص برای این منظور استفاده نمایید، یا میتوانید از روش app.Shutdown(context.Context) استفاده نمایید.
برای ثبت رویداد CTRL/CMD+C از iris.RegisterOnInterrupt استفاده کنید:
idleConnsClosed := make(chan struct{})
iris.RegisterOnInterrupt(func() {
timeout := 10 * time.Second
ctx, cancel := stdContext.WithTimeout(stdContext.Background(), timeout)
defer cancel()
// بستن همه میزبانها.
app.Shutdown(ctx)
close(idleConnsClosed)
})
// [...]
app.Listen(":8080", iris.WithoutInterruptHandler, iris.WithoutServerError(iris.ErrServerClosed))
<-idleConnsClosed