Documentation
¶
Index ¶
- Constants
- Variables
- type Client
- type ClientOption
- func WithCloseGracePeriod(d time.Duration) ClientOption
- func WithCompression(enabled bool) ClientOption
- func WithDialer(...) ClientOption
- func WithHandshakeTimeout(d time.Duration) ClientOption
- func WithHeaders(h map[string][]string) ClientOption
- func WithInitialReconnect(d time.Duration) ClientOption
- func WithLogger(l *golog.Logger) ClientOption
- func WithMaxConsecutiveFailures(n int) ClientOption
- func WithMaxReconnect(d time.Duration) ClientOption
- func WithMessageQueueSize(size int) ClientOption
- func WithMetrics(m *Metrics) ClientOption
- func WithOnClose(fn func()) ClientOption
- func WithOnError(fn func(error)) ClientOption
- func WithOnMessage(fn func([]byte, MessageType)) ClientOption
- func WithOnOpen(fn func()) ClientOption
- func WithPingInterval(d time.Duration) ClientOption
- func WithPinger(p Pinger) ClientOption
- func WithPongTimeout(d time.Duration) ClientOption
- func WithReadLimit(n int64) ClientOption
- func WithReadTimeout(d time.Duration) ClientOption
- func WithReconnectFactor(f float64) ClientOption
- func WithReconnectJitter(j float64) ClientOption
- func WithSubprotocols(subs ...string) ClientOption
- func WithWriteTimeout(d time.Duration) ClientOption
- type MessageType
- type Metrics
- type Pinger
- type StatusCode
Constants ¶
const ( DefaultInitialReconnectInterval = 1 * time.Second DefaultMaxReconnectInterval = 30 * time.Second DefaultReconnectFactor = 2.0 DefaultReconnectJitter = 0.5 DefaultPingInterval = 30 * time.Second DefaultPongTimeout = 10 * time.Second DefaultWriteTimeout = 10 * time.Second DefaultReadTimeout = 10 * time.Second DefaultHandshakeTimeout = 5 * time.Second DefaultMessageQueueSize = 100 DefaultCloseGracePeriod = 5 * time.Second DefaultMaxConsecutiveFailures = 10 // DefaultReadLimit is the default maximum message size in bytes (1 MB). // The underlying websocket library defaults to 32 KB which is too small for // crypto exchange streams (e.g., Binance's !ticker@arr can exceed 500 KB). DefaultReadLimit = 1 << 20 // 1 MB )
Variables ¶
var ErrClosed = errors.New("client closed")
ErrClosed indicates the client is closed.
var ErrPermanentFailure = errors.New("permanent failure after max reconnect attempts")
ErrPermanentFailure indicates the client gave up reconnecting after reaching the configured maximum consecutive failures.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is a robust WebSocket client with auto-reconnect and advanced features.
func NewClient ¶
func NewClient(url string, options ...ClientOption) *Client
NewClient creates a new robust WebSocket client. The resulting client is safe for concurrent use; call Connect to initiate the connection lifecycle.
func (*Client) Close ¶
func (c *Client) Close()
Close gracefully shuts down the client, waiting indefinitely for all goroutines to exit.
func (*Client) CloseWithTimeout ¶ added in v1.0.1
CloseWithTimeout shuts down the client while honouring the provided context. If the context expires, the method returns immediately.
func (*Client) Connect ¶
Connect performs the initial handshake. It returns once the first attempt either succeeds or fails, while the reconnect manager continues running in the background.
func (*Client) PermanentError ¶ added in v1.0.5
PermanentError returns the terminal error that caused the client to stop reconnecting. It returns nil while the client is still active or attempting reconnects.
type ClientOption ¶
type ClientOption func(*clientOptions)
ClientOption is a functional option for configuring the Client.
func WithCloseGracePeriod ¶
func WithCloseGracePeriod(d time.Duration) ClientOption
func WithCompression ¶
func WithCompression(enabled bool) ClientOption
func WithDialer ¶ added in v1.0.1
func WithHandshakeTimeout ¶
func WithHandshakeTimeout(d time.Duration) ClientOption
func WithHeaders ¶
func WithHeaders(h map[string][]string) ClientOption
func WithInitialReconnect ¶
func WithInitialReconnect(d time.Duration) ClientOption
func WithLogger ¶
func WithLogger(l *golog.Logger) ClientOption
func WithMaxConsecutiveFailures ¶ added in v1.0.1
func WithMaxConsecutiveFailures(n int) ClientOption
func WithMaxReconnect ¶
func WithMaxReconnect(d time.Duration) ClientOption
func WithMessageQueueSize ¶
func WithMessageQueueSize(size int) ClientOption
func WithMetrics ¶ added in v1.0.1
func WithMetrics(m *Metrics) ClientOption
func WithOnClose ¶
func WithOnClose(fn func()) ClientOption
func WithOnError ¶
func WithOnError(fn func(error)) ClientOption
func WithOnMessage ¶
func WithOnMessage(fn func([]byte, MessageType)) ClientOption
func WithOnOpen ¶
func WithOnOpen(fn func()) ClientOption
func WithPingInterval ¶
func WithPingInterval(d time.Duration) ClientOption
func WithPinger ¶ added in v1.0.1
func WithPinger(p Pinger) ClientOption
func WithPongTimeout ¶
func WithPongTimeout(d time.Duration) ClientOption
func WithReadLimit ¶ added in v1.0.5
func WithReadLimit(n int64) ClientOption
WithReadLimit sets the maximum message size in bytes that can be read from the WebSocket connection. This is passed to conn.SetReadLimit() after establishing the connection. By default, the read limit is set to DefaultReadLimit (1 MB) which is suitable for most crypto exchange streams. A value of -1 disables the read limit entirely.
func WithReadTimeout ¶
func WithReadTimeout(d time.Duration) ClientOption
func WithReconnectFactor ¶
func WithReconnectFactor(f float64) ClientOption
func WithReconnectJitter ¶
func WithReconnectJitter(j float64) ClientOption
func WithSubprotocols ¶
func WithSubprotocols(subs ...string) ClientOption
func WithWriteTimeout ¶
func WithWriteTimeout(d time.Duration) ClientOption
type MessageType ¶
type MessageType = websocket.MessageType
MessageType aliases websocket.MessageType for convenience.
type Metrics ¶ added in v1.0.1
type Metrics struct {
OnReconnect func(wait time.Duration)
OnQueueDrop func(msg queuedMessage)
OnPingFailure func(err error)
OnPermanentError func(err error)
}
Metrics aggregates optional callbacks that can be used for instrumentation.
type StatusCode ¶
type StatusCode = websocket.StatusCode
StatusCode aliases websocket.StatusCode for convenience.