1 Star 0 Fork 0

kzangv / gsf-core

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
web.go 2.53 KB
一键复制 编辑 原始数据 按行查看 历史
kzangv 提交于 2023-08-10 10:47 . fixed
package gsf
import (
"fmt"
"gitee.com/kzangv/gsf-core/logger"
"github.com/urfave/cli/v2"
"net/http"
"os"
"time"
)
const (
CliWebIP = "web-ip"
CliWebPort = "web-port"
CliWebReadTimeout = "web-r-timeout"
CliWebWriteTimeout = "web-w-timeout"
CliWebIdleTimeout = "web-idle-timeout"
)
type WebConfig struct {
IP string `json:"ip" yaml:"ip"`
Port int `json:"port" yaml:"port"`
Timeout struct {
Read int `json:"read" yaml:"read"`
Write int `json:"write" yaml:"write"`
Idle int `json:"idle" yaml:"idle"`
} `json:"timeout" yaml:"timeout"`
}
type WebService struct {
cfg WebConfig
Handle http.Handler
BeforeRun, BeforeInit func(l logger.Interface) error
}
func (c *WebService) CliFlags() []cli.Flag {
return []cli.Flag{
&cli.StringFlag{Name: CliWebIP, Value: "0.0.0.0", Usage: "web service ip", Destination: &c.cfg.IP},
&cli.IntFlag{Name: CliWebPort, Value: 9980, Usage: "web service port", Destination: &c.cfg.Port},
&cli.IntFlag{Name: CliWebReadTimeout, Value: 0, Usage: "web service read timeout", Destination: &c.cfg.Timeout.Read},
&cli.IntFlag{Name: CliWebWriteTimeout, Value: 0, Usage: "web service write timeout", Destination: &c.cfg.Timeout.Write},
&cli.IntFlag{Name: CliWebIdleTimeout, Value: 0, Usage: "web service idle timeout", Destination: &c.cfg.Timeout.Idle},
}
}
func (c *WebService) Init(cfg *Config, _ *cli.Context) (logger.Interface, error) {
v := &logger.Console{}
switch cfg.Env() {
case EnvLocal:
v.Init(logger.Info, true, os.Stdout, os.Stderr)
case EnvTest, EnvPrev, EnvRelease:
v.Init(logger.Warn, false, os.Stdout, os.Stderr)
}
if c.BeforeInit != nil {
if err := c.BeforeInit(v); err != nil {
return nil, err
}
}
return v, nil
}
func (c *WebService) Run(l logger.Interface, cfg *Config) error {
if c.BeforeRun != nil {
if err := c.BeforeRun(l); err != nil {
return err
}
}
if c.cfg.IP == "" {
l.WarnForce("Listening Server [[[ Run-Mode: %s ]]] http://127.0.0.1:%d\n", cfg.EnvDesc(), c.cfg.Port)
} else {
l.WarnForce("Listening Server [[[ Run-Mode: %s ]]] http://%s:%d\n", cfg.EnvDesc(), c.cfg.IP, c.cfg.Port)
}
// web
srv := &http.Server{
Addr: fmt.Sprintf("%s:%d", c.cfg.IP, c.cfg.Port),
ReadTimeout: time.Duration(c.cfg.Timeout.Read) * time.Second,
WriteTimeout: time.Duration(c.cfg.Timeout.Write) * time.Second,
IdleTimeout: time.Duration(c.cfg.Timeout.Idle) * time.Second,
Handler: c.Handle,
}
srv.SetKeepAlivesEnabled(true)
return srv.ListenAndServe()
}
func (c *WebService) Close() {
}
Go
1
https://gitee.com/kzangv/gsf-core.git
git@gitee.com:kzangv/gsf-core.git
kzangv
gsf-core
gsf-core
v1.0.8

搜索帮助

53164aa7 5694891 3bd8fe86 5694891