Files
platform/web/web.go

92 lines
1.6 KiB
Go

package web
import (
"net/http"
g "platform/web/globals"
"runtime"
"log/slog"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/requestid"
"github.com/google/uuid"
"github.com/jxskiss/base62"
_ "net/http/pprof"
)
type Config struct {
Listen string
}
type Server struct {
config *Config
fiber *fiber.App
}
func New(config *Config) (*Server, error) {
_config := config
if config == nil {
_config = &Config{}
}
return &Server{
config: _config,
}, nil
}
func (s *Server) Run() error {
// inits
g.InitBaiyin()
g.InitAlipay()
// g.InitWechatPay()
g.InitAliyun()
g.InitValidator()
// config
s.fiber = fiber.New(fiber.Config{
ProxyHeader: fiber.HeaderXForwardedFor,
ErrorHandler: ErrorHandler,
})
s.fiber.Use(logger.New(logger.Config{
DisableColors: false,
}))
s.fiber.Use(requestid.New(requestid.Config{
Generator: func() string {
binary, _ := uuid.New().MarshalBinary()
return base62.EncodeToString(binary)
},
}))
ApplyRouters(s.fiber)
// pprof
go func() {
runtime.SetBlockProfileRate(1)
err := http.ListenAndServe(":6060", nil)
if err != nil {
slog.Error("pprof 服务错误", slog.Any("err", err))
}
}()
// listen
slog.Info("Server started on :8080")
err := s.fiber.Listen(":8080")
if err != nil {
slog.Error("Failed to start server", slog.Any("err", err))
}
slog.Info("Server stopped")
return nil
}
func (s *Server) Stop() {
err := s.fiber.Shutdown()
if err != nil {
slog.Error("Failed to shutdown server", slog.Any("err", err))
}
}