wsclient

package
v1.5.6 Latest Latest
Warning

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

Go to latest
Published: Jul 3, 2025 License: Apache-2.0 Imports: 30 Imported by: 2

Documentation

Index

Constants

View Source
const (
	// WSSpecificConfPrefix is the named sub-section of the http config options that contains websocket specific config
	WSSpecificConfPrefix = "ws"
	// WSConfigKeyWriteBufferSize is the write buffer size
	WSConfigKeyWriteBufferSize = "ws.writeBufferSize"
	// WSConfigKeyReadBufferSize is the read buffer size
	WSConfigKeyReadBufferSize = "ws.readBufferSize"
	// WSConfigKeyInitialConnectAttempts sets how many times the websocket should attempt to connect on startup, before failing (after initial connection, retry is indefinite)
	WSConfigKeyInitialConnectAttempts = "ws.initialConnectAttempts"
	// WSConfigKeyBackgroundConnect is recommended instead of initialConnectAttempts for new uses of this library, and makes initial connection and reconnection identical in behavior
	WSConfigKeyBackgroundConnect = "ws.backgroundConnect"
	// WSConfigKeyPath if set will define the path to connect to - allows sharing of the same URL between HTTP and WebSocket connection info
	WSConfigKeyPath = "ws.path"
	// WSConfigURL if set will be a completely separate URL for WebSockets (must be a ws: or wss: scheme)
	WSConfigURL = "ws.url"
	// WSConfigKeyHeartbeatInterval is the frequency of ping/pong requests, and also used for the timeout to receive a response to the heartbeat
	WSConfigKeyHeartbeatInterval = "ws.heartbeatInterval"
	// WSConnectionTimeout is the amount of time to wait while attempting to establish a connection (or automatic reconnection)
	WSConfigKeyConnectionTimeout = "ws.connectionTimeout"
	// WSConfigDelayFactor the exponential backoff factor for delay
	WSConfigDelayFactor = "retry.factor"
)

Variables

This section is empty.

Functions

func GenerateTLSCertficates added in v1.2.10

func GenerateTLSCertficates(t *testing.T) (publicKeyFile *os.File, privateKeyFile *os.File)

GenerateTLSCertificates creates a key pair for server and client auth

func InitConfig added in v0.1.4

func InitConfig(conf config.Section)

InitConfig ensures the config is initialized for HTTP too, as WS and HTTP can share the same tree of configuration (and all the HTTP options apply to the initial upgrade)

func InitConfigWrap added in v1.5.5

func InitConfigWrap(conf config.Section)

func NewTestTLSWSServer added in v1.2.10

func NewTestTLSWSServer(testReq func(req *http.Request), publicKeyFile *os.File, privateKeyFile *os.File) (toServer, fromServer chan string, url string, done func(), err error)

NewTestTLSWSServer creates a little test server for packages (including wsclient itself) to use in unit tests and secured with mTLS by passing in a key pair

func NewTestWSServer

func NewTestWSServer(testReq func(req *http.Request)) (toServer, fromServer chan string, url string, done func())

NewTestWSServer creates a little test server for packages (including wsclient itself) to use in unit tests

Types

type WSClient

type WSClient interface {
	Connect() error
	Receive() <-chan []byte
	ReceiveExt() <-chan *WSPayload
	URL() string
	SetURL(url string)
	SetHeader(header, value string)
	Send(ctx context.Context, message []byte) error
	Close()
}

func New

func New(ctx context.Context, config *WSConfig, beforeConnect WSPreConnectHandler, afterConnect WSPostConnectHandler) (WSClient, error)

Creates a new outbound client that can be connected to a remote server

func Wrap added in v1.5.5

func Wrap(ctx context.Context, config WSWrapConfig, wsconn *websocket.Conn, onClose func()) WSClient

Wrap an existing connection (including an inbound server connection) with heartbeating and throttling. No reconnect functions are supported when wrapping an existing connection like this, but the supplied callback will be invoked when the connection closes (allowing cleanup/tracking).

type WSConfig

type WSConfig struct {
	HTTPURL                   string             `json:"httpUrl,omitempty"`
	WebSocketURL              string             `json:"wsUrl,omitempty"`
	WSKeyPath                 string             `json:"wsKeyPath,omitempty"`
	ReadBufferSize            int                `json:"readBufferSize,omitempty"`
	WriteBufferSize           int                `json:"writeBufferSize,omitempty"`
	InitialDelay              time.Duration      `json:"initialDelay,omitempty"`
	MaximumDelay              time.Duration      `json:"maximumDelay,omitempty"`
	DelayFactor               float64            `json:"delayFactor,omitempty"`
	BackgroundConnect         bool               `json:"backgroundConnect,omitempty"`
	InitialConnectAttempts    int                `json:"initialConnectAttempts,omitempty"` // recommend backgroundConnect instead
	DisableReconnect          bool               `json:"disableReconnect"`
	AuthUsername              string             `json:"authUsername,omitempty"`
	AuthPassword              string             `json:"authPassword,omitempty"`
	ThrottleRequestsPerSecond int                `json:"requestsPerSecond,omitempty"`
	ThrottleBurst             int                `json:"burst,omitempty"`
	HTTPHeaders               fftypes.JSONObject `json:"headers,omitempty"`
	HeartbeatInterval         time.Duration      `json:"heartbeatInterval,omitempty"`
	TLSClientConfig           *tls.Config        `json:"tlsClientConfig,omitempty"`
	ConnectionTimeout         time.Duration      `json:"connectionTimeout,omitempty"`
	// This one cannot be set in JSON - must be configured on the code interface
	ReceiveExt bool
}

func GenerateConfig added in v0.1.4

func GenerateConfig(ctx context.Context, conf config.Section) (*WSConfig, error)

type WSPayload added in v1.2.11

type WSPayload struct {
	MessageType int
	Reader      io.Reader
	// contains filtered or unexported fields
}

WSPayload allows API consumers of this package to stream data, and inspect the message type, rather than just being passed the bytes directly.

func NewWSPayload added in v1.2.11

func NewWSPayload(mt int, r io.Reader) *WSPayload

func (*WSPayload) Processed added in v1.2.11

func (wsp *WSPayload) Processed()

Must call done on each payload, before being delivered the next

type WSPostConnectHandler

type WSPostConnectHandler func(ctx context.Context, w WSClient) error

WSPostConnectHandler will be called after every connect/reconnect. Can send data over ws, but must not block listening for data on the ws.

type WSPreConnectHandler

type WSPreConnectHandler func(ctx context.Context, w WSClient) error

WSPreConnectHandler will be called before every connect/reconnect. Any error returned will prevent the websocket from connecting.

type WSWrapConfig added in v1.5.5

type WSWrapConfig struct {
	HeartbeatInterval         time.Duration `json:"heartbeatInterval,omitempty"`
	ThrottleRequestsPerSecond int           `json:"requestsPerSecond,omitempty"`
	ThrottleBurst             int           `json:"burst,omitempty"`
	// This one cannot be set in JSON - must be configured on the code interface
	ReceiveExt bool
}

Jump to

Keyboard shortcuts

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