الإطار العمل 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