server

package
v4.5.2 Latest Latest
Warning

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

Go to latest
Published: Dec 28, 2024 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	TUnknown = TServer{/* contains filtered or unexported fields */}
	TUdp     = TServer{/* contains filtered or unexported fields */}
	TTcp     = TServer{/* contains filtered or unexported fields */}
	TWeb     = TServer{/* contains filtered or unexported fields */}
	TGrpc    = TServer{/* contains filtered or unexported fields */}
)

Functions

This section is empty.

Types

type BasicAuthConfiguration added in v4.3.0

type BasicAuthConfiguration struct {
	AuthFunc BasicAuthFunc          // Функция выполняющая проверку простой web авторизации.
	Request  string                 // Строка запроса, отправляемая пользователю с просьбой выполнить авторизацию.
	Header   map[dic.IHeader]string // Заголовки, добавляемые в запрос аутентификации.
	Body     *bytes.Buffer          // Тело страницы запроса аутентификации.
}

BasicAuthConfiguration Конфигурация промежуточного слоя выполняющего проверку авторизации. AuthFunc - Функция будет вызвана для проверки полученных данных авторизации. Request - Запрос, отправляемый пользователю с просьбой авторизоваться. Можно не указывать. Header - Заголовки, передаваемые с запросом с просьбой авторизоваться. Можно не указывать. Body - Тело страницы, передаваемое с запросом с просьбой авторизоваться. Можно не указывать.

type BasicAuthFunc added in v4.3.0

type BasicAuthFunc func(username string, password string) BasicAuthResponse

BasicAuthFunc Функция передаваемая в "промежуточный слой", выполняющая проверку переданных данных простой авторизации. Функция возвращает объект BasicAuthResponse. Если свойство объекта IsCorrect равно "ложь", тогда запрос прерывается, и в ответ на запрос передаются данные указанные в объекте BasicAuthResponse. Если в объекте BasicAuthResponse свойство Body равно nil, тогда телом ответа будет код статуса ответа.

type BasicAuthResponse added in v4.3.0

type BasicAuthResponse struct {
	IsCorrect bool                   // Флаг подтверждения проверки доступа.
	Code      dic.IStatus            // Интерфейс объекта кода HTTP ответа.
	Header    map[dic.IHeader]string // Заголовки добавляемые в ответ.
	Body      *bytes.Buffer          // Тело ответа.
}

BasicAuthResponse Структура ответа на запрос с простой авторизацией.

type GrpcConfiguration

type GrpcConfiguration struct {
	// Server Конфигурация WEB сервера.
	Server GrpcServerConfiguration `yaml:"Server"`
}

GrpcConfiguration Структура конфигурации GRPC сервера.

type GrpcServerConfiguration

type GrpcServerConfiguration struct {
	// TLSPublicKeyPEM Путь и имя файла содержащего публичный ключ (сертификат) в PEM формате, включая CA сертификаты
	// всех промежуточных центров сертификации, если ими подписан ключ.
	TLSPublicKeyPEM string `yaml:"TLSPublicKeyPEM" json:"tls_public_key_pem"`

	// TLSPrivateKeyPEM Путь и имя файла содержащего приватный ключ в PEM формате.
	TLSPrivateKeyPEM string `yaml:"TLSPrivateKeyPEM" json:"tls_private_key_pem"`

	// Host IP адрес или имя хоста на котором поднимается сервер, можно указывать 0.0.0.0 для всех ip адресов.
	// Default value: "0.0.0.0"
	Host string `yaml:"Host" json:"host" default-value:"0.0.0.0"`

	// Port tcp/ip порт занимаемый сервером.
	// Default value: 80
	Port uint16 `yaml:"Port" json:"port" default-value:"80"`

	// Socket Unix socket на котором поднимается сервер, только для unix-like операционных систем Linux, Unix, Mac.
	// Default value: "" - unix socket is off
	Socket string `yaml:"Socket" json:"socket" default-value:"-"`

	// Mode Режим работы, tcp, tcp4, tcp6, unix, unixpacket, socket, systemd.
	// tcp - Сервер поднимается на указанном Host:Port.
	// socket - Сервер поднимается на socket, только для unix-like операционных систем.
	// systemd - Порт или сокет открывает systemd и передаёт слушателя порта через файловый дескриптор сервису
	//           запущенному от пользователя без права открытия привилегированных портов.
	// Default value: "tcp"
	Mode string `yaml:"Mode" json:"mode" default-value:"tcp"`

	// WriteBufferSize Размер буфера записи, определяет максимальное количество данных для одного системного вызова.
	// Памяти выделяется в 2 раза больше размера буфера записи.
	// Если указано значение 0 - это отключит буфер записи.
	// Default value: 32768 (32 килобайта).
	WriteBufferSize int `yaml:"WriteBufferSize"`

	// ReadBufferSize Размер буфера чтения, определяет максимальное читаемых количество данных для одного системного
	// вызова.
	// Если указано значение 0 - это отключит буфер чтения.
	// Default value: 32768 (32 килобайта).
	ReadBufferSize int `yaml:"ReadBufferSize"`

	// InitialWindowSize Размер окна для потоковых данных.
	// Минимальное значение 65536 байт или 64 килобайта, любое меньшее значение будет проигнорировано.
	// Default value: 65536 (64 килобайта).
	InitialWindowSize int32 `yaml:"InitialWindowSize"`

	// InitialConnWindowSize Размер окна для данных запросов (подключения).
	// Минимальное значение 65536 байт или 64 килобайта, любое меньшее значение будет проигнорировано.
	// Default value: 65536 (64 килобайта).
	InitialConnWindowSize int32 `yaml:"InitialConnWindowSize"`

	// KeepaliveMaxConnectionIdle Максимальное время простоя не занятого соединения, по истечении которого
	// соединение закрывается путём отправки сообщения об отказе.
	// Продолжительность простоя соединения определяется с момента установки соединения либо с момента времени,
	// когда количество не занятых соединений стало равным нулю.
	// Default value: 0s - бесконечность.
	KeepaliveMaxConnectionIdle time.Duration `yaml:"KeepaliveMaxConnectionIdle"`

	// KeepaliveMaxConnectionAge Максимальное значение времени в течении которого соединени может оставаться открытым.
	// Значение по умолчанию - бесконечность.
	// Для значения боьше 0, добавляется случайное значение в размере +/- 10%.
	// Default value: 0s - бесконечность.
	KeepaliveMaxConnectionAge time.Duration `yaml:"KeepaliveMaxConnectionAge"`

	// KeepaliveMaxConnectionAgeGrace Дополнительная отсрочка принудительного закрытия соединения после истечения
	// значения определенного в MaxConnectionAge.
	// Значение по умолчанию - бесконечность.
	// Default value: 0s - бесконечность.
	KeepaliveMaxConnectionAgeGrace time.Duration `yaml:"KeepaliveMaxConnectionAgeGrace"`

	// KeepaliveTime Время, по истечении которого, если сервер не видит никакой активности, выполняется
	// проверка соединения с клиентом.
	// Минимальное значение 1 секунда, если указано значение меньше 1 секунды, используется 1 секунда.
	// Значение по умолчанию - 2 часа.
	// Default value: 2h
	KeepaliveTime time.Duration `yaml:"KeepaliveTime"`

	// KeepaliveTimeout Время ожидания ответа на сообщение пинга, по истечении которого, соединение закрывается.
	// Значение по умолчанию 20 секунд.
	// Default value: 20s
	KeepaliveTimeout time.Duration `yaml:"KeepaliveTimeout"`

	// KeepaliveMinTime Минимальное количество времени которое клиент должен подождать перед отправкой пинг запроса.
	// Default value: 5m
	KeepaliveMinTime time.Duration `yaml:"KeepaliveMinTime"`

	// KeepalivePermitWithoutStream Разрешение поддержки пинг-запросов при отсутствии активных потоков.
	// Если указано "ложь", при отсутствии активных потоков, на запрос пинг от клиента, сервер ответит
	// сообщением GO AWAY и закроет соединение.
	// Default value: false
	KeepalivePermitWithoutStream bool `yaml:"KeepalivePermitWithoutStream"`

	// MaxRecvMsgSize Максимальный размер сообщения в байтах, которое может принимать сервер.
	// Если не указано, значение по умолчанию 4 мегабайта.
	// Default value: 4194304 (4 мегабайта).
	MaxRecvMsgSize int `yaml:"MaxRecvMsgSize"`

	// MaxSendMsgSize Максимальный размер сообщения в байтах, которое может отправить сервер.
	// Если не указано, значение по умолчанию равно максимальному числу int32 = 2147483647 или 2 гигабайта.
	// Default value: 2147483647 (=math.MaxInt32)
	MaxSendMsgSize int `yaml:"MaxSendMsgSize"`

	// MaxConcurrentStreams Максимальное количество потоковых соединений, которое может принимать сервер.
	// Default value: 0 - нет ограничений.
	MaxConcurrentStreams uint32 `yaml:"MaxConcurrentStreams"`

	// ConnectionTimeout Время ожидания установки соединения.
	// Нулевое или отрицательное значение приведёт к немедленному завершению соединения, которое не
	// успеет установиться и будет приводить к ошибке.
	// Default value: 120s
	ConnectionTimeout time.Duration `yaml:"ConnectionTimeout"`

	// MaxHeaderListSize Максимальный, не сжатый, размер заголовков, принимаемый сервером.
	// Default value: 0 - без ограничений.
	MaxHeaderListSize uint32 `yaml:"MaxHeaderListSize"`

	// HeaderTableSize Размер динамической таблицы заголовков для потоковой передачи данных.
	// Default value: 0 - без ограничений.
	HeaderTableSize uint32 `yaml:"HeaderTableSize"`

	// NumStreamWorkers Количество потоков, которые держит сервер, для обработки входящих запросов.
	// Значение равное нулю заставляет сервер запускать новый поток для каждого нового запроса.
	// Default value: 0 - нет потоков, для каждого нового запроса создаётся новый поток.
	NumStreamWorkers uint32 `yaml:"NumStreamWorkers"`
}

GrpcServerConfiguration Структура конфигурации веб сервера.

type GrpcServers

type GrpcServers struct {
	GrpcServers []GrpcConfiguration `yaml:"GRPCServers"`
}

GrpcServers Структура конфигурации группы GRPC серверов.

type RequestShadowInfo added in v4.1.1

type RequestShadowInfo struct {
	Server                     *Server
	ProjectID                  uint64  `header:"X-Project-Id"`                                                                // Уникальный идентификатор проекта.
	Authorization              string  `header:"Authorization"   cookie:"Access-Token"   urn-param:"accessToken,accesstoken"` // Текущий сессионный токен доступа.
	UserAgent                  string  `header:"User-Agent"`                                                                  // Заголовок, значение которого используется для описания устройства пользователя.
	AcceptLanguage             string  `header:"Accept-Language"`                                                             // Предпочитаемые языки локализации.
	AcceptEncoding             string  `header:"Accept-Encoding"`                                                             // Перечень поддерживаемых способов кодирования для ответа на запрос.
	DeviceID                   string  `header:"X-Device-Id"     cookie:"AuthDeviceID"`                                       // Содержит идентификатор ранее сохранённого устройства пользователя.
	DeviceName                 string  `header:"X-Device-Name"`                                                               // Название устройства или название приложения, для отображения в списке запомненных устройств.
	IP                         net.IP  `header:"X-Real-Ip,X-Client-Forwarded-For"`                                            // IP адрес клиента.
	Scheme                     string  `header:"X-Client-Forwarded-Scheme"`                                                   // Протокол по которому подключается клиент, возможные значения: http, https.
	Domain                     string  `header:"X-Client-Forwarded-Domain,Host"          call-func:"RequestExtractionDomain"` // Доменное имя сервера к которому пришел запрос.
	Origin                     string  `header:"Origin"`                                                                      // Источник, схема, хост, порт запроса.
	ContentType                string  `header:"Content-Type"`                                                                // Формат передаваемых данных.
	Singleton                  bool    `                                                 urn-param:"singleton"`               // Режим одиночки. Если указано true, при успешной аутентификации все другие действующие сессии пользователя будут удалены.
	NoCookie                   bool    `                                                 urn-param:"noCookie"`                // Не использовать Cookie.
	LocationLatitude           float64 `header:"X-Location-Latitude"`                                                         // Координаты широты местонахождения устройства.
	LocationLongitude          float64 `header:"X-Location-Longitude"`                                                        // Координаты долготы местонахождения устройства.
	LocationAltitude           float64 `header:"X-Location-Altitude"`                                                         // Высота местонахождения устройства над уровнем моря в метрах.
	LocationSpeed              float64 `header:"X-Location-Speed"`                                                            // Скорость передвижения устройства в метрах в секунду.
	LocationAzimuth            float64 `header:"X-Location-Azimuth"`                                                          // Азимут (направление движения) в градусах относительно истинного севера.
	LocationAccuracyHorizontal float64 `header:"X-Location-Accuracy-Horizontal"`                                              // Радиус неопределённости местоположения по горизонтали в метрах.
	LocationAccuracyVertical   float64 `header:"X-Location-Accuracy-Vertical"`                                                // Радиус неопределённости местоположения по вертикали в метрах.
	LocationAccuracySpeed      float64 `header:"X-Location-Accuracy-Speed"`                                                   // Точность значения скорости, измеряемое в метрах в секунду.
	LocationAccuracyAzimuth    float64 `header:"X-Location-Accuracy-Azimuth"`                                                 // Точность измерения направления движения устройства в градусах.
	LocationTimestamp          uint64  `header:"X-Location-Timestamp"`                                                        // Дата и время полученное со спутников в момент определения координат.
}

RequestShadowInfo Информация извлекаемая из запроса.

func (*RequestShadowInfo) RequestExtractionDomain added in v4.1.1

func (rsi *RequestShadowInfo) RequestExtractionDomain(rq *http.Request) (ret string)

type Server

type Server struct {
	// T Тип сервера, web, grpc, tcp, udp.
	T TServer

	// Web Конфигурация ВЕБ сервера.
	Web *WebConfiguration

	// Grpc Конфигурация GRPC сервера.
	Grpc *GrpcConfiguration
}

Server Структура с информацией о сервере.

type TServer

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

TServer Тип сервера.

func TServerParseString

func TServerParseString(s string) (ret TServer)

TServerParseString Преобразование строки в тип.

func TServerParseUint16

func TServerParseUint16(i uint16) (ret TServer)

TServerParseUint16 Преобразование uint16 в тип.

func (*TServer) String

func (sto *TServer) String() string

String Реализация интерфейса Stringify.

func (*TServer) Uint16

func (sto *TServer) Uint16() uint16

Uint16 Представление типа в качестве числа.

type Web

type Web struct {
	// Middleware Промежуточный слой (middleware), подключаются к базовому пути, действуют для всех контроллеров
	// подключаемых к тому же базовому пути.
	// Если базовый путь указан пустым, тогда промежуточный слой относятся не к контроллеру, а к серверу целиком
	// и подключаются до начала настройки роутинга.
	// Может быть пустым срезом.
	Middleware []WebMiddlewareFn

	// Path Базовый путь URN, обрабатываемый ресурсом.
	// Пример: /api/v1.0
	// Для контроллеров не может быть пустым, URN должен начинаться со слэша.
	// Если указан пустой путь, тогда контроллеры игнорируются, подключается только "промежуточный слой" к серверу
	// целиком, до начала настройки роутинга.
	Path string

	// Controller Контроллеры ресурса.
	// Может быть пустым срезом.
	Controller []WebController

	// Before Функция вызывается после готовности приложения к запуску, до начала настройки сервера и ресурсов сервера.
	// Если функция возвращает ошибку, тогда настройка ресурса прерывается.
	// Если функция не установлена, равна nil, функция не вызывается.
	Before WebEventFn
}

Web Описание ресурса WEB сервера.

type WebConfiguration

type WebConfiguration struct {
	// Server Конфигурация WEB сервера.
	Server web.Configuration `yaml:"Server"`

	// DocumentRoot Корень http сервера.
	// Используется в основном для не изменяемого статического контента.
	DocumentRoot string `yaml:"DocumentRoot"`

	// Pages Расположение специализированных html шаблонов для страниц сайта.
	// Код результирующих страниц генерируется на стороне сервера с использованием шаблонизатора и
	// специальных контроллеров.
	Pages string `yaml:"Pages"`
}

WebConfiguration Структура конфигурации WEB сервера.

type WebController

type WebController struct {
	// Middleware Промежуточный слой (middleware), подключаемое к указанному пути URN.
	// Может быть пустым срезом.
	Middleware []WebMiddlewareFn

	// Путь URN, обрабатываемый контроллером.
	// Не может быть пустым, URN должен начинаться с '/'.
	Path string

	// Method Метод запроса.
	// Если указан пустой срез - все методы запросов.
	// Может быть пустым срезом.
	Method []dic.IMethod

	// Matcher Функция возвращает "истина" для запросов которые контроллер готов обработать.
	// Используется в режиме мультиплексора, когда контроллер выбирается на основе заголовка или типа контента запроса,
	// пример: создание сервера обрабатывающего и HTTP/REST FULL запросы и GRPC запросы.
	// Если функция не установлена - равна nil, функция не вызывается.
	Matcher WebMatcherFn

	// Controller Контроллер, выполняющий обработку запросов к данному пути.
	// Функция обязательно должна быть обязательно определена, не может равняться nil.
	Controller http.HandlerFunc
}

WebController Описание контроллера.

type WebEventFn

type WebEventFn func(*Server) error

WebEventFn Функция события изменения состояния сервера.

type WebMatcherFn

type WebMatcherFn func(io.Reader) bool

WebMatcherFn Функция определения готов ли контроллер обработать запрос. Используется в режиме мультиплексора, когда контроллер выбирается на основе заголовка или типа контента запроса, пример: создание сервера обрабатывающего и HTTP/REST FULL запросы и GRPC запросы. Возвращается "истина", если контроллер готов обработать запрос.

type WebMiddlewareFn

type WebMiddlewareFn func(next http.Handler) http.Handler

WebMiddlewareFn Функция "промежуточного слоя" программного обеспечения ВЕБ сервера.

type WebResource

type WebResource interface {
	// Resource Описание ресурса. // Функция вызывается дважды.
	// 1. Первый вызов передаёт конфигурацию веб сервера равную nil и служит для получения
	//    конфигурации ресурса для вызова функции Before().
	// 2. Второй вызов передаёт конфигурацию веб сервера и выполняется в момент настройки роутинга.
	Resource(*WebConfiguration) *Web
}

WebResource Интерфейс регистрации контроллера ресурса сервера.

type WebServerControl

type WebServerControl struct {
	Server        web.Interface // Интерфейс управления ВЕБ сервером.
	Configuration *Server       // Ссылка на конфигурацию сервера.
}

WebServerControl Описание выполняющегося ВЕБ сервера, его конфигурация и интерфейс контроля.

type WebServers

type WebServers struct {
	WebServers []WebConfiguration `yaml:"WEBServers"`
}

WebServers Структура конфигурации группы веб серверов.

Jump to

Keyboard shortcuts

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