recws

package
v0.1.9 Latest Latest
Warning

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

Go to latest
Published: Sep 1, 2020 License: MIT, MIT Imports: 9 Imported by: 0

README

recws

Go Report Card GitHub license

Reconnecting WebSocket is a websocket client based on gorilla/websocket that will automatically reconnect if the connection is dropped.

Basic example

package main

import (
	"context"
	"github.com/mariuspass/recws"
	"log"
	"time"
)

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	ws := recws.RecConn{}
	ws.Dial("wss://echo.websocket.org", nil)

	go func() {
		time.Sleep(2 * time.Second)
		cancel()
	}()

	for {
		select {
		case <-ctx.Done():
			go ws.Close()
			log.Printf("Websocket closed %s", ws.GetURL())
			return
		default:
			if !ws.IsConnected() {
				log.Printf("Websocket disconnected %s", ws.GetURL())
				continue
			}

			if err := ws.WriteMessage(1, []byte("Incoming")); err != nil {
				log.Printf("Error: WriteMessage %s", ws.GetURL())
				return
			}

			_, message, err := ws.ReadMessage()
			if err != nil {
				log.Printf("Error: ReadMessage %s", ws.GetURL())
				return
			}

			log.Printf("Success: %s", message)
		}
	}
}

Documentation

Overview

Package recws provides websocket client based on gorilla/websocket that will automatically reconnect if the connection is dropped.

Index

Constants

This section is empty.

Variables

View Source
var ErrNotConnected = errors.New("websocket: not connected")

ErrNotConnected is returned when the application read/writes a message and the connection is closed

Functions

This section is empty.

Types

type RecConn

type RecConn struct {
	// RecIntvlMin specifies the initial reconnecting interval,
	// default to 2 seconds
	RecIntvlMin time.Duration
	// RecIntvlMax specifies the maximum reconnecting interval,
	// default to 30 seconds
	RecIntvlMax time.Duration
	// RecIntvlFactor specifies the rate of increase of the reconnection
	// interval, default to 1.5
	RecIntvlFactor float64
	// HandshakeTimeout specifies the duration for the handshake to complete,
	// default to 2 seconds
	HandshakeTimeout time.Duration
	// NonVerbose suppress connecting/reconnecting messages.
	NonVerbose bool
	// SubscribeHandler fires after the connection successfully establish.
	SubscribeHandler func() error
	// KeepAliveTimeout is an interval for sending ping/pong messages
	// disabled if 0
	KeepAliveTimeout time.Duration

	*websocket.Conn
	// contains filtered or unexported fields
}

The RecConn type represents a Reconnecting WebSocket connection.

func (*RecConn) Close

func (rc *RecConn) Close()

Close closes the underlying network connection without sending or waiting for a close frame.

func (*RecConn) CloseWS

func (rc *RecConn) CloseWS()

CloseWS closes the underlying network connection without sending or waiting for a close frame.

func (*RecConn) Dial

func (rc *RecConn) Dial(urlStr string, reqHeader http.Header)

Dial creates a new client connection. The URL url specifies the host and request URI. Use requestHeader to specify the origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). Use GetHTTPResponse() method for the response.Header to get the selected subprotocol (Sec-WebSocket-Protocol) and cookies (Set-Cookie).

func (*RecConn) GetDialError

func (rc *RecConn) GetDialError() error

GetDialError returns the last dialer error. nil on successful connection.

func (*RecConn) GetHTTPResponse

func (rc *RecConn) GetHTTPResponse() *http.Response

GetHTTPResponse returns the http response from the handshake. Useful when WebSocket handshake fails, so that callers can handle redirects, authentication, etc.

func (*RecConn) GetURL

func (rc *RecConn) GetURL() string

GetURL returns current connection url

func (*RecConn) IsClosed

func (rc *RecConn) IsClosed() bool

IsClosed returns the WebSocket connection state

func (*RecConn) IsConnected

func (rc *RecConn) IsConnected() bool

IsConnected returns the WebSocket connection state

func (*RecConn) ReadJSON

func (rc *RecConn) ReadJSON(v interface{}) error

ReadJSON reads the next JSON-encoded message from the connection and stores it in the value pointed to by v.

See the documentation for the encoding/json Unmarshal function for details about the conversion of JSON to a Go value.

If the connection is closed ErrNotConnected is returned

func (*RecConn) ReadMessage

func (rc *RecConn) ReadMessage() (messageType int, message []byte, err error)

ReadMessage is a helper method for getting a reader using NextReader and reading from that reader to a buffer.

If the connection is closed ErrNotConnected is returned

func (*RecConn) SetProxyURL

func (rc *RecConn) SetProxyURL(proxyURL string)

SetProxyURL set connect proxy url

func (*RecConn) WriteJSON

func (rc *RecConn) WriteJSON(v interface{}) error

WriteJSON writes the JSON encoding of v to the connection.

See the documentation for encoding/json Marshal for details about the conversion of Go values to JSON.

If the connection is closed ErrNotConnected is returned

func (*RecConn) WriteMessage

func (rc *RecConn) WriteMessage(messageType int, data []byte) error

WriteMessage is a helper method for getting a writer using NextWriter, writing the message and closing the writer.

If the connection is closed ErrNotConnected is returned

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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