server

package
v1.7.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 2, 2023 License: MIT Imports: 13 Imported by: 0

README

HTTP сервер.

Компонент предоставляет готовый и настроенный http сервер, с готовым роутингом. Так же, компонент сам следит за закрытием контекста из компонента Отслеживание сигнала на закрытие приложения и останавливает сервер при закрытии контекста.

Объект конфигурации.
type Config struct {
	Interface       string
	Port            uint16
	ShutdownTimeout time.Duration
}

Описание полей:

Поле Описание Значение по умолчанию
Interface Интерфейс прослушивания запросов, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --server.http.interface
- переменная окружения SERVER_HTTP_INTERFACE
- значение в конфиг файле server.http.interface
0.0.0.0
Port Порт прослушивания запросов, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --server.http.port
- переменная окружения SERVER_HTTP_PORT
- значение в конфиг файле server.http.port
8080
ShutdownTimeout Таймаут в течении которого, сервер должен быть закрыт, после закрытия контекста, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --server.http.timeout.shutdown
- переменная окружения SERVER_HTTP_TIMEOUT_SHUTDOWN
- значение в конфиг файле server.http.timeout.shutdown
30s

Пакет с компонентом предоставляет хелперы, которые находятся в подпакете helper:

  • JSONError - отправляет ошибки в json формате;
  • WriteError - сканирует заголовки запроса Accept и Content-Type, если хотя бы один имеет значение application/json отправляет ошибку в json формате, иначе отправляет ошибку обычным текстом.

Documentation

Index

Constants

View Source
const (
	InterfaceFieldName       = "server.http.interface"
	PortFieldName            = "server.http.port"
	ShutdownTimeoutFieldName = "server.http.timeout.shutdown"

	InterfaceDefault       = "0.0.0.0"
	PortDefault            = uint16(8080)
	ShutdownTimeoutDefault = 30 * time.Second
)

Variables

View Source
var Component = &app.Component{
	Dependencies: app.Components{
		logger.Component,
		configurator.Component,
		re_configuration.Component,
		router.Component,
	},
	Constructor: func(container container.Container) error {
		return container.Provides(
			NewConfig,
			NewReConfigurationWithConfigurator,
		)
	},
	BindFlags: func(flagSet *pflag.FlagSet, container container.Container) error {
		return container.Invoke(func(config *Config) {
			flagSet.StringVar(&config.Interface, InterfaceFieldName, InterfaceDefault, "interface for listening to incoming requests")
			flagSet.Uint16Var(&config.Port, PortFieldName, PortDefault, "port for listening to incoming requests")
			flagSet.DurationVar(
				&config.ShutdownTimeout,
				ShutdownTimeoutFieldName,
				ShutdownTimeoutDefault,
				"timeout during which the HTTP server must be turned off after receiving a shutdown signal",
			)
		})
	},
	Serve: func(c container.Container) error {
		server, err := container.Get[*ReConfiguration](c)
		if err != nil {
			return err
		}

		closer, err := container.Get[closer.Closer](c)
		if err != nil {
			return err
		}

		reConfiguration, err := container.Get[configurator.ReConfiguration](c)
		if err != nil {
			return err
		}

		informer, err := container.Get[logger.Informer](c)
		if err != nil {
			return err
		}

		reConfiguration.Registration(server)
		informer.Info("http.server: registration in the reConfigurator")

		return server.Serve(closer.GetContext())
	},
}

Functions

This section is empty.

Types

type Config

type Config struct {
	Interface       string
	Port            uint16
	ShutdownTimeout time.Duration
}

func Configuration

func Configuration(config *Config, configurator configurator.Configurator) *Config

func NewConfig

func NewConfig() *Config

type HTTPServer

type HTTPServer struct {
	// contains filtered or unexported fields
}

func NewHTTPServer

func NewHTTPServer(logger logger.Logger, router router.Router, config *Config) *HTTPServer

func NewWithConfigurator

func NewWithConfigurator(configurator configurator.Configurator, config *Config, router router.Router, logger logger.Logger) *HTTPServer

func (*HTTPServer) Serve

func (server *HTTPServer) Serve(ctx context.Context) error

type ReConfiguration

type ReConfiguration struct {
	// contains filtered or unexported fields
}

func NewReConfiguration

func NewReConfiguration(logger logger.Logger, router router.Router, config *Config) *ReConfiguration

func NewReConfigurationWithConfigurator

func NewReConfigurationWithConfigurator(logger logger.Logger, router router.Router, config *Config, configurator configurator.Configurator) *ReConfiguration

func (*ReConfiguration) ReConfiguration

func (reConfiguration *ReConfiguration) ReConfiguration(configurator configurator.Configurator) error

func (*ReConfiguration) Serve

func (reConfiguration *ReConfiguration) Serve(ctx context.Context) error

func (*ReConfiguration) Server

func (reConfiguration *ReConfiguration) Server() Server

type Server

type Server interface {
	Serve(ctx context.Context) error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL