engine/websocket: subscribe to default channels only when actually needed (#610)

* if this is required by ws routines or sync manager
* restore previous subscriptions on reconnect
This commit is contained in:
Rauno Ots
2020-12-29 02:10:37 +01:00
committed by GitHub
parent b95cfaccab
commit d1b206c45b
24 changed files with 75 additions and 146 deletions

View File

@@ -86,11 +86,7 @@ func (b *Binance) WsConnect() error {
go b.wsReadData()
subs, err := b.GenerateSubscriptions()
if err != nil {
return err
}
return b.Websocket.SubscribeToChannels(subs)
return nil
}
// KeepAuthKeyAlive will continuously send messages to

View File

@@ -61,12 +61,8 @@ func (b *Bitfinex) WsConnect() error {
}
}
subs, err := b.GenerateDefaultSubscriptions()
if err != nil {
return err
}
go b.WsDataHandler()
return b.Websocket.SubscribeToChannels(subs)
return nil
}
// wsReadData receives and passes on websocket messages for processing

View File

@@ -95,15 +95,6 @@ func (b *Bitmex) WsConnect() error {
}
go b.wsReadData()
subs, err := b.GenerateDefaultSubscriptions()
if err != nil {
return err
}
err = b.Websocket.SubscribeToChannels(subs)
if err != nil {
return err
}
err = b.websocketSendAuth()
if err != nil {

View File

@@ -40,12 +40,8 @@ func (b *Bitstamp) WsConnect() error {
if err != nil {
b.Websocket.DataHandler <- err
}
subs, err := b.generateDefaultSubscriptions()
if err != nil {
return err
}
go b.wsReadData()
return b.Websocket.SubscribeToChannels(subs)
return nil
}
// wsReadData receives and passes on websocket messages for processing

View File

@@ -40,11 +40,7 @@ func (b *BTCMarkets) WsConnect() error {
log.Debugf(log.ExchangeSys, "%s Connected to Websocket.\n", b.Name)
}
go b.wsReadData()
subs, err := b.generateDefaultSubscriptions()
if err != nil {
return err
}
return b.Websocket.SubscribeToChannels(subs)
return nil
}
// wsReadData receives and passes on websocket messages for processing

View File

@@ -49,11 +49,7 @@ func (b *BTSE) WsConnect() error {
}
}
subs, err := b.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return b.Websocket.SubscribeToChannels(subs)
return nil
}
// WsAuthenticate Send an authentication message to receive auth data

View File

@@ -38,12 +38,8 @@ func (c *CoinbasePro) WsConnect() error {
return err
}
subs, err := c.GenerateDefaultSubscriptions()
if err != nil {
return err
}
go c.wsReadData()
return c.Websocket.SubscribeToChannels(subs)
return nil
}
// wsReadData receives and passes on websocket messages for processing

View File

@@ -49,11 +49,7 @@ func (c *Coinbene) WsConnect() error {
c.Websocket.SetCanUseAuthenticatedEndpoints(false)
}
}
subs, err := c.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return c.Websocket.SubscribeToChannels(subs)
return nil
}
// GenerateDefaultSubscriptions generates stuff

View File

@@ -61,15 +61,6 @@ func (c *COINUT) WsConnect() error {
c.Websocket.SetCanUseAuthenticatedEndpoints(false)
log.Error(log.WebsocketMgr, err)
}
subs, err := c.GenerateDefaultSubscriptions()
if err != nil {
return err
}
err = c.Websocket.SubscribeToChannels(subs)
if err != nil {
return err
}
// define bi-directional communication
channels = make(map[string]chan []byte)

View File

@@ -69,11 +69,7 @@ func (f *FTX) WsConnect() error {
}
}
subs, err := f.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return f.Websocket.SubscribeToChannels(subs)
return nil
}
// WsAuth sends an authentication message to receive auth data

View File

@@ -62,11 +62,7 @@ func (g *Gateio) WsConnect() error {
}
}
subs, err := g.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return g.Websocket.SubscribeToChannels(subs)
return nil
}
func (g *Gateio) wsServerSignIn() error {

View File

@@ -50,11 +50,7 @@ func (h *HitBTC) WsConnect() error {
log.Errorf(log.ExchangeSys, "%v - authentication failed: %v\n", h.Name, err)
}
subs, err := h.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return h.Websocket.SubscribeToChannels(subs)
return nil
}
// wsReadData receives and passes on websocket messages for processing

View File

@@ -83,11 +83,7 @@ func (h *HUOBI) WsConnect() error {
}
go h.wsReadData()
subs, err := h.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return h.Websocket.SubscribeToChannels(subs)
return nil
}
func (h *HUOBI) wsDial(dialer *websocket.Dialer) error {

View File

@@ -131,11 +131,7 @@ func (k *Kraken) WsConnect() error {
k.Name,
err)
}
gensubs, err := k.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return k.Websocket.SubscribeToChannels(gensubs)
return nil
}
// wsFunnelConnectionData funnels both auth and public ws data into one manageable place

View File

@@ -50,11 +50,7 @@ func (l *LakeBTC) WsConnect() error {
return err
}
go l.wsHandleIncomingData()
subs, err := l.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return l.Websocket.SubscribeToChannels(subs)
return nil
}
func (l *LakeBTC) listenToEndpoints() error {

View File

@@ -203,11 +203,7 @@ func (o *OKGroup) WsConnect() error {
}
}
subs, err := o.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return o.Websocket.SubscribeToChannels(subs)
return nil
}
// WsLogin sends a login request to websocket to enable access to authenticated endpoints

View File

@@ -53,12 +53,8 @@ func (p *Poloniex) WsConnect() error {
}
go p.wsReadData()
subs, err := p.GenerateDefaultSubscriptions()
if err != nil {
return err
}
return p.Websocket.SubscribeToChannels(subs)
return nil
}
func (p *Poloniex) getCurrencyIDMap() error {

View File

@@ -192,11 +192,6 @@ func (w *Websocket) Connect() error {
w.trafficMonitor()
w.setConnectingStatus(true)
// flush any subscriptions from last connection if needed
w.subscriptionMutex.Lock()
w.subscriptions = nil
w.subscriptionMutex.Unlock()
err := w.connector()
if err != nil {
w.setConnectingStatus(false)
@@ -211,6 +206,14 @@ func (w *Websocket) Connect() error {
w.connectionMonitor()
}
// Resubscribe after re-connection
if len(w.subscriptions) != 0 {
err = w.Subscriber(w.subscriptions)
if err != nil {
return fmt.Errorf("%v Error subscribing %s", w.exchangeName, err)
}
}
return nil
}

View File

@@ -41,12 +41,8 @@ func (z *ZB) WsConnect() error {
return err
}
subs, err := z.GenerateDefaultSubscriptions()
if err != nil {
return err
}
go z.wsReadData()
return z.Websocket.SubscribeToChannels(subs)
return nil
}
// wsReadData handles all the websocket data coming from the websocket