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
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
|
|
}
|