| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // package kserv_http_std -- реализация HTTP-сервера на стандартной библиотеке.
- package kserv_http_std
- import (
- "fmt"
- "net/http"
- "sync"
- "time"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
- "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
- )
- // kServHttpStd -- реализация HTTP-сервера на стандартной библиотеке.
- type kServHttpStd struct {
- kCtx *kern_ctx.KernCtx
- log *lev1.LogBuf
- port *lev0.LNum
- server *http.Server
- }
- var (
- kServ *kServHttpStd
- mu sync.Mutex
- )
- // GetKservHttpStd -- возвращает HTTP-сервер на стандартной библиотеке.
- func GetKservHttpStd() *lev0.Result[*kServHttpStd] {
- mu.Lock()
- defer mu.Unlock()
- if kServ != nil {
- return lev0.ResOk(kServ)
- }
- logBufParam := &lev1.LogBufParam{
- IsTerm_: lev0.MutSafeBool(true),
- Prefix_: lev0.LetTxt("kServHttpStd"),
- }
- log := lev1.NewLogBuf(logBufParam)
- log.Debug("GetKservHttpStd()")
- resPort := lev0.MutSafeNumFromEnv(lev0.LetTxt("SERV_HTTP_STD_PORT"))
- port := resPort.Hassert("in get env SERV_HTTP_STD_PORT")
- sf := &kServHttpStd{
- kCtx: kern_ctx.GetKernCtx(),
- log: log,
- port: lev0.LetNum(port.Get()),
- }
- kServ = sf
- return lev0.ResOk(sf)
- }
- // Run -- запускает сервер вы работу.
- func (sf *kServHttpStd) Run() {
- sf.server = &http.Server{
- Addr: fmt.Sprintf(":%v", sf.port),
- ReadTimeout: 30 * time.Second,
- WriteTimeout: 30 * time.Second,
- IdleTimeout: 75 * time.Second,
- Handler: nil,
- }
- // Запуск сервера в горутине
- go func() {
- msg := lev0.LetTxt("kServHttpStd.Run().fn(): run on http://%v", sf.server.Addr)
- sf.log.Debug(msg.Get())
- if err := sf.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
- err := lev0.LetErr("kServHttpStd.Run.fn(): in work, err=\n\t%v", err)
- sf.log.Err(err)
- }
- }()
- go sf.close()
- if err := sf.server.Shutdown(sf.kCtx.SelfCtx()); err != nil {
- sf.log.Debug("kServHttpStd.Run(): ошибка при graceful shutdown, err=\n\t%v", err)
- }
- sf.log.Info("Сервер остановлен")
- }
- func (sf *kServHttpStd) close() {
- }
|