net

package module
v1.3.1 Latest Latest
Warning

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

Go to latest
Published: Dec 19, 2024 License: MIT Imports: 13 Imported by: 2

README

net

GoDoc Go Report Card Coverage Status

Описание

Библиотека, надстройка над "net", для создания управляемого сервера на основе стандартной библиотеки net. Предназначена для создания серверов:

  • UDP - Сервера принимающие и отвечающие на UDP пакеты.
  • TCP/IP - Сервера принимающие TCP/IP запросы (как чистые TCP/IP, так и http, rpc или gRPC и другие).
  • TLS - Сервера на основе TCP/IP запросов с использованием TLS шифрования (те же сервера, что TCP/IP, но с использованием TLS шифрования, например https).
  • socket - Сервера поднимающие unix socket и полностью работающие через него.
  • systemd - Сервера, запускаемые через systemd с использованием технологии передачи соединения через файловый сокет, когда прослушиваемый порт открывает systemd от пользователя root, затем, открытый порт передаёт процессу запущенному без прав, через файловый дескриптор (документация: man systemd.socket(5)).
Зависимости
github.com/pires/go-proxyproto
Подключение
go get github.com/webnice/net
Использование в приложении

Пример веб сервера с роутингом через "github.com/go-chi/chi/v5".

package main

import (
	"io"
	"log"
	"net"
	"net/http"

	"github.com/go-chi/chi/v5"
	wns "github.com/webnice/net"
)

func main() {
	nut := wns.New().
		Handler(func(l net.Listener) error {
			route := chi.NewRouter()
			route.Get("/", func(wr http.ResponseWriter, rq *http.Request) {
				wr.Header().Set("Content-Type", "text/plain")
				_, _ = io.WriteString(wr, "Hello, World!")
			})
			srv := &http.Server{
				Addr:    "localhost:8080",
				Handler: route,
			}

			return srv.Serve(l)
		}).
		ListenAndServe("localhost:8080")
	if nut.Error() != nil {
		log.Fatalf("запуск сервера прерван ошибкой: %s", nut.Error())
		return
	}
	// Ожидание завершения сервера.
	if err := nut.Wait().
		Error(); err != nil {
		log.Fatalf("сервер завершился с ошибкой: %s", err)
		return
	}
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Configuration

type Configuration struct {
	// ID Уникальный идентификатор сервера, может быть любым уникальным, в пределах приложения, строковым значением.
	// Если значение не указано, при запуске сервера, создаётся уникальное временное значение, меняющееся
	// при каждом запуске.
	// Default value: ""
	ID string `yaml:"ID" json:"id"`

	// Address Публичный адрес на котором сервер доступен извне.
	// Например, если сервер находится за прокси, тут указывается реальный адрес подключения к серверу.
	// Default value: "" - make automatically
	Address string `yaml:"Address" json:"address"`

	// 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: 0
	Port uint16 `yaml:"Port" json:"port" default-value:"-"`

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

	// SocketMode Файловые разрешения доступа к юникс-сокету.
	// Значение задаётся в восьмеричной системе счисления и не должно превышать 32 бита.
	// Default value: "0666"
	SocketMode string `yaml:"SocketMode" json:"socket_mode" default-value:"0666"`

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

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

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

	// ProxyProtocol Включение прокси-протокола.
	// Прокси-протокол позволяет серверу получать информацию о подключении клиента, передаваемую через
	// прокси-серверы и средства балансировки нагрузки, такие как Nginx, HAProxy, Amazon Elastic Load
	// Balancer (ELB) и многие другие.
	// Поддерживаются запросы с реализацией прокси протокола версий 1 и 2.
	// PROXY protocol: https://www.haproxy.org/download/2.3/doc/proxy-protocol.txt.
	// Default value: false
	ProxyProtocol bool `yaml:"ProxyProtocol" json:"proxy_protocol"`

	// ProxyProtocolReadHeaderTimeout Максимальное время ожидания получения данных о клиенте через прокси-протокол.
	// Время ожидание используется только при включённом прокси-протоколе.
	// Default value: 0s - no timeout
	ProxyProtocolReadHeaderTimeout time.Duration `yaml:"ProxyProtocolReadHeaderTimeout" json:"proxy_protocol_read_header_timeout"`
}

Configuration Структура конфигурации TCP/IP или UDP сервера.

func (*Configuration) HostPort

func (uco *Configuration) HostPort() (ret string)

HostPort Формирование строки HOST:PORT.

type Error

type Error struct{}

Error object of package

func Errors

func Errors() *Error

Errors Справочник ошибок.

func (*Error) AlreadyRunning added in v1.1.0

func (e *Error) AlreadyRunning() error

AlreadyRunning Сервер уже запущен.

func (*Error) ListenSystemdFDS added in v1.1.0

func (e *Error) ListenSystemdFDS() error

ListenSystemdFDS Переменная окружения LISTEN_FDS пустая, либо содержит не верное значение.

func (*Error) ListenSystemdNotFound added in v1.1.0

func (e *Error) ListenSystemdNotFound() error

ListenSystemdNotFound Получение сокета systemd по имени, имя не найдено.

func (*Error) ListenSystemdPID added in v1.1.0

func (e *Error) ListenSystemdPID() error

ListenSystemdPID Переменная окружения LISTEN_PID пустая, либо содержит не верное значение.

func (*Error) ListenSystemdQuantityNotMatch added in v1.1.0

func (e *Error) ListenSystemdQuantityNotMatch() error

ListenSystemdQuantityNotMatch Полученное количество LISTEN_FDS не соответствует переданному LISTEN_FDNAMES.

func (*Error) NoConfiguration added in v1.1.0

func (e *Error) NoConfiguration() error

NoConfiguration Конфигурация сервера отсутствует либо равна nil.

func (*Error) ServerHandlerIsNotSet added in v1.1.0

func (e *Error) ServerHandlerIsNotSet() error

ServerHandlerIsNotSet Не установлен обработчик основной функции TCP сервера.

func (*Error) ServerHandlerUdpIsNotSet added in v1.1.0

func (e *Error) ServerHandlerUdpIsNotSet() error

ServerHandlerUdpIsNotSet Не установлен обработчик основной функции UDP сервера.

func (*Error) TLSIsNil added in v1.1.0

func (e *Error) TLSIsNil() error

TLSIsNil Конфигурация TLS сервера пустая.

type HandlerFn

type HandlerFn func(net.Listener) error

HandlerFn Описание типа функции TCP или сокет сервера.

type HandlerUdpFn

type HandlerUdpFn func(net.PacketConn) error

HandlerUdpFn Описание типа функции UDP или сервера пакетов.

type Interface

type Interface interface {

	// ID Уникальный идентификатор сервера.
	// Если идентификатор не был указан в конфигурации, создаётся при запуске.
	ID() string

	// Handler Назначение основной функции TCP или сокет сервера. Функция должна назначаться до запуска сервера.
	Handler(fn HandlerFn) Interface

	// HandlerUdp Назначение основной функции UDP сервера. Функция должна назначаться до запуска сервера.
	HandlerUdp(fn HandlerUdpFn) Interface

	// ListenAndServe Открытие адреса или сокета без использования конфигурации сервера (конфигурация по
	// умолчанию), после успешного открытия адреса, выполняется запуск сервера для обслуживания входящих соединений.
	ListenAndServe(addr string) Interface

	// ListenAndServeTLS Открытие адреса или сокета с использованием TLS, без использования конфигурации сервера
	// (конфигурация по умолчанию), после успешного открытия адреса, выполняется запуск сервера для обслуживания
	// входящих соединений.
	ListenAndServeTLS(addr string, certFile string, keyFile string, tlsConfig *tls.Config) Interface

	// ListenAndServeWithConfig Настройка сервера с использованием переданной конфигурации, открытие адреса или сокета
	// на прослушивание, после успешного открытия адреса, выполняется запуск сервера для
	// обслуживания входящих соединений.
	ListenAndServeWithConfig(conf *Configuration) Interface

	// ListenAndServeTLSWithConfig Настройка сервера с использованием переданной конфигурации в режиме TLS, открытие
	// адреса или сокета на прослушивание, после успешного открытия адреса, выполняется запуск сервера для
	// обслуживания входящих соединений.
	ListenAndServeTLSWithConfig(conf *Configuration, tlsConfig *tls.Config) Interface

	// ListenersSystemdWithoutNames Возвращает срез net.Listener сокетов переданных в процесс сервера
	// из службы linux - systemd.
	ListenersSystemdWithoutNames() (ret []net.Listener, err error)

	// ListenersSystemdWithNames Возвращает карту срезов net.Listener сокетов переданных в процесс сервера
	// из службы linux - systemd.
	ListenersSystemdWithNames() (ret map[string][]net.Listener, err error)

	// ListenersSystemdTLSWithoutNames Возвращает срез net.nnlistener для TLS сокетов переданных в процесс сервера
	// из службы linux - systemd.
	ListenersSystemdTLSWithoutNames(tlsConfig *tls.Config) (ret []net.Listener, err error)

	// ListenersSystemdTLSWithNames Возвращает карту срезов net.listener для TLS сокетов переданных в процесс сервера
	// из службы linux - systemd.
	ListenersSystemdTLSWithNames(tlsConfig *tls.Config) (ret map[string][]net.Listener, err error)

	// NewListener Создание нового слушателя соединений net.Listener на основе конфигурации сервера.
	NewListener(conf *Configuration) (ret net.Listener, rpc net.PacketConn, err error)

	// NewListenerTLS Создание нового слушателя соединений net.Listener в режиме TLS, на основе конфигурации
	// сервера.
	NewListenerTLS(conf *Configuration, tlsConfig *tls.Config) (ret net.Listener, rpc net.PacketConn, err error)

	// NewTLSConfigDefault Создание TLS конфигурации по умолчанию, на основе секретного и публичного ключей.
	NewTLSConfigDefault(tlsPublicFile string, tlsPrivateFile string) (ret *tls.Config, err error)

	// Serve Запуск функции сервера для входящих соединений на основе переданного слушателя net.Listener.
	Serve(net.Listener) Interface

	// ServeWithId Запуск функции сервера для входящих соединений на основе переданного слушателя net.Listener с
	// указанием ID сервера.
	ServeWithId(ltn net.Listener, id string) Interface

	// ServeUdp Запуск функции сервера для входящих UDP пакетов на основе переданного слушателя net.PacketConn.
	ServeUdp(lpc net.PacketConn) Interface

	// ServeUdpWithId Запуск функции сервера для входящих UDP пакетов на основе переданного слушателя net.PacketConn с
	// указанием ID сервера.
	ServeUdpWithId(lpc net.PacketConn, id string) Interface

	// Wait Блокируемая функция ожидания завершения веб сервера, если он запущен.
	// Если сервер не запущен, функция завершается немедленно.
	Wait() Interface

	// Stop Завершение работы сервера/функции сервера.
	Stop() Interface

	// IsRunning Статус выполнения сервера.
	// Вернётся истина, если сервер запущен.
	IsRunning() (ret bool)

	// Clean Очистка последней ошибки.
	Clean() Interface

	// Errors Справочник ошибок.
	Errors() *Error

	// Error Последняя ошибка сервера.
	Error() error
}

Interface Интерфейс пакета.

func New

func New() Interface

New Конструктор объекта сущности пакета, возвращается интерфейс пакета.

Jump to

Keyboard shortcuts

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