Reconnect on any read error
This commit is contained in:
parent
4fe5c94d9c
commit
ef2e61a1d7
44
websocket.go
44
websocket.go
@ -8,7 +8,6 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/cenkalti/backoff/v4"
|
"github.com/cenkalti/backoff/v4"
|
||||||
@ -58,28 +57,25 @@ func NewWebSocket(baseURL string) (*WSClient, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
out.errCh <- err
|
out.errCh <- err
|
||||||
|
|
||||||
// gorilla/websocket eats the error type, so I have to check
|
conn.Close()
|
||||||
// the string itself
|
err = backoff.RetryNotify(
|
||||||
if strings.HasSuffix(err.Error(), "connection timed out") {
|
func() error {
|
||||||
err = backoff.RetryNotify(
|
conn, _, err = keepaliveDialer().Dial(u.JoinPath("ws").String(), nil)
|
||||||
func() error {
|
if err != nil {
|
||||||
conn, _, err = keepaliveDialer().Dial(u.JoinPath("ws").String(), nil)
|
out.errCh <- err
|
||||||
if err != nil {
|
return err
|
||||||
out.errCh <- err
|
}
|
||||||
return err
|
out.conn = conn
|
||||||
}
|
out.recHandler(out)
|
||||||
out.conn = conn
|
return nil
|
||||||
out.recHandler(out)
|
},
|
||||||
return nil
|
backoff.NewExponentialBackOff(),
|
||||||
},
|
func(err error, d time.Duration) {
|
||||||
backoff.NewExponentialBackOff(),
|
out.errCh <- fmt.Errorf("reconnect backoff (%s): %w", d, err)
|
||||||
func(err error, d time.Duration) {
|
},
|
||||||
out.errCh <- fmt.Errorf("reconnect backoff (%s): %w", d, err)
|
)
|
||||||
},
|
if err != nil {
|
||||||
)
|
out.errCh <- err
|
||||||
if err != nil {
|
|
||||||
out.errCh <- err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
continue
|
continue
|
||||||
@ -201,7 +197,7 @@ func keepaliveDialer() *websocket.Dialer {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = conn.SetKeepAlivePeriod(time.Second)
|
err = conn.SetKeepAlivePeriod(10 * time.Second)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user