Documentation
¶
Index ¶
Constants ¶
const ( // ReadBufferSizeFieldName -размер буфера чтения ReadBufferSizeFieldName = "server.http.websocket.size.buffer.read" //WriteBufferSizeFieldName - размер буфера записи WriteBufferSizeFieldName = "server.http.websocket.size.buffer.write" // OriginsFieldName - разрешённые origins OriginsFieldName = "server.http.websocket.origins" // PingTimeoutFieldName - таймаут ping PingTimeoutFieldName = "server.http.websocket.timeout.ping" // WriteTimeoutFieldName - таймаут записи WriteTimeoutFieldName = "server.http.websocket.timeout.write" // ClientEventBufferSizeFieldName - размер буфера событий клиента ClientEventBufferSizeFieldName = "server.http.websocket.size.buffer.events" // AnyOrigin - wildcard для разрешения любого origin AnyOrigin = "*" )
Variables ¶
var ( ReadBufferSizeDefault = int(1024) WriteBufferSizeDefault = int(1024) ClientEventBufferSizeDefault = 10 WriteTimeoutDefault = 20 * time.Second PingTimeoutDefault = 60 * time.Second )
var ( // MessageChanFullError возникает, когда буфер исходящих сообщений клиента заполнен. MessageChanFullError = errors.New("message channel is full") // MessageChanClosedError возникает при попытке записи в закрытый канал. MessageChanClosedError = errors.New("message channel is closed") )
var Component = compogo.Component{ Name: "http.server.websocket", Init: compogo.StepFunc(func(container compogo.Container) error { return container.Provides(NewConfig, NewUpgrader) }), BindFlags: compogo.BindFlags(func(flagSet flag.FlagSet, container compogo.Container) error { return container.Invoke(func(config *Config) { flagSet.IntVar(&config.ReadBufferSize, ReadBufferSizeFieldName, ReadBufferSizeDefault, "") flagSet.IntVar(&config.WriteBufferSize, WriteBufferSizeFieldName, WriteBufferSizeDefault, "") flagSet.IntVar(&config.ClientEventBufferSize, ClientEventBufferSizeFieldName, ClientEventBufferSizeDefault, "") flagSet.DurationVar(&config.WriteTimeout, WriteTimeoutFieldName, WriteTimeoutDefault, "") flagSet.DurationVar(&config.PingTimeout, PingTimeoutFieldName, PingTimeoutDefault, "") flagSet.StringSliceVar(&config.origins, OriginsFieldName, nil, "") }) }), Configuration: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(Configuration) }), }
Component — компонент WebSocket для Compogo. Регистрирует конфигурацию и Upgrader в DI-контейнере.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client представляет WebSocket-клиента (одно соединение). Обеспечивает:
- Двусторонний обмен сообщениями
- Автоматические ping/pong для поддержания соединения
- Буферизацию исходящих сообщений
- Graceful shutdown через контекст
func NewClient ¶
func NewClient(conn *websocket.Conn, config *Config, onMessage emitter.Emitter[*Event], logger compogo.Logger) *Client
NewClient создаёт нового WebSocket-клиента.
type Config ¶
type Config struct {
ReadBufferSize int
WriteBufferSize int
ClientEventBufferSize int
WriteTimeout time.Duration
PingTimeout time.Duration
PingInterval time.Duration
Origins set.Set[string]
// contains filtered or unexported fields
}
Config содержит конфигурацию WebSocket.
func Configuration ¶
func Configuration(config *Config, configurator compogo.Configurator) *Config
Configuration загружает конфигурацию из Configurator. PingInterval вычисляется как 90% от PingTimeout для надёжности.
type Event ¶
type Event struct {
Type string `json:"type,omitempty"`
Payload json.RawMessage `json:"payload,omitempty"`
Timestamp *Timestamp `json:"timestamp,omitempty"`
}
Event представляет событие, передаваемое по WebSocket. Содержит тип, полезную нагрузку (payload) и временную метку.
Пример:
event := &Event{
Type: "chat_message",
Payload: json.RawMessage(`{"text":"hello","user":"john"}`),
}
type Handler ¶
type Handler struct {
OnClientConnection emitter.Emitter[*Client]
OnClientDisconnection emitter.Emitter[*Client]
OnMessage emitter.Emitter[*Event]
// contains filtered or unexported fields
}
Handler — HTTP-обработчик WebSocket-соединений. Управляет всеми активными клиентами и обеспечивает:
- Апгрейд HTTP до WebSocket
- Управление клиентами (добавление/удаление)
- Рассылку сообщений всем клиентам
- События подключения/отключения клиентов
- Эмиттер входящих сообщений
func NewHandler ¶
func NewHandler( config *Config, upgrader *Upgrader, logger compogo.Logger, closer compogo.Closer, ) *Handler
NewHandler создаёт новый WebSocket-обработчик.
type Timestamp ¶
type Timestamp struct {
Seconds int64 `json:"seconds,omitempty"`
Nano int32 `json:"nano,omitempty"`
}
Timestamp представляет временную метку в формате Unix. Используется для отметки времени создания событий.
func NewTimestamp ¶
func NewTimestamp() *Timestamp
NewTimestamp создаёт временную метку для текущего момента времени (UTC).
type Upgrader ¶
Upgrader — обёртка над websocket.Upgrader с поддержкой проверки Origin
func NewUpgrader ¶
NewUpgrader создаёт новый Upgrader с конфигурацией из Config.
func (*Upgrader) CheckOrigin ¶
CheckOrigin проверяет, разрешён ли Origin запроса. Поддерживает:
- Wildcard "*" — разрешены все origins
- Совпадение с хостом запроса (same-origin)
- Список разрешённых origins из конфигурации
Реализует интерфейс websocket.Upgrader.CheckOrigin.