You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
1.8 KiB

package server
import (
"context"
"epur-pay/cache"
"epur-pay/model"
"epur-pay/pkg/config"
"epur-pay/pkg/limit"
"epur-pay/pkg/logger"
"fmt"
"net/http"
"os"
"os/signal"
"time"
)
func (p *App) WaitServerAppListen() {
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt)
sig := <-signalChan
logger.AccessLogger.Warnln("Get Signal:", sig, " Shutdown Server ...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
for _, v := range p.ServerApps {
if err := v.Shutdown(ctx); err != nil {
logger.AccessLogger.Errorln("Shutdown: ", err)
}
}
logger.AccessLogger.Infoln("server exiting")
}
func (p *App) ListenServerApp() *App {
for _, v := range p.ServerApps {
go func(v *http.Server) {
if err := v.ListenAndServe(); err != nil {
logger.AccessLogger.Warnf("HTTP listen: %s\n", err)
}
}(v)
}
go func() {
for !cache.Global.ProjectInitStatus {
time.Sleep(100 * time.Millisecond)
}
if p.RunMode == "release" {
cache.Global.LimitRouter.Api = limit.NewUriLimiter().
AddBucketByConf(cache.Global.LimitRouter.Rule.Rules)
}
}()
logger.AccessLogger.Infof("server listening ...")
return p
}
func (p *App) AddServerApp(s1 model.ListenServer, r http.Handler) *App {
endPoint := fmt.Sprintf(":%d", s1.Port)
logger.AccessLogger.Infoln(endPoint)
ReadTimeout := time.Second
WriteTimeout := time.Second
if config.Cf.Common.RunMode == "release" {
ReadTimeout = s1.ReadTimeOut * time.Second
WriteTimeout = s1.WriteTimeOut * time.Second
} else {
ReadTimeout = 60 * 60 * time.Second
WriteTimeout = 60 * 60 * time.Second
}
p.ServerApps = append(p.ServerApps, &http.Server{
Addr: endPoint,
Handler: r,
ReadTimeout: ReadTimeout,
WriteTimeout: WriteTimeout,
MaxHeaderBytes: 1 << 20,
})
return p
}