代码拉取完成,页面将自动刷新
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() {
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。