diff --git a/exchanges/binance/binance_types.go b/exchanges/binance/binance_types.go index 5f6641a9..267b031e 100644 --- a/exchanges/binance/binance_types.go +++ b/exchanges/binance/binance_types.go @@ -8,6 +8,8 @@ import ( "github.com/thrasher-corp/gocryptotrader/exchanges/asset" ) +const wsRateLimitMilliseconds = 250 + // withdrawals status codes description const ( EmailSent = iota diff --git a/exchanges/binance/binance_websocket.go b/exchanges/binance/binance_websocket.go index 703cff72..8df87855 100644 --- a/exchanges/binance/binance_websocket.go +++ b/exchanges/binance/binance_websocket.go @@ -540,14 +540,21 @@ func (b *Binance) Subscribe(channelsToSubscribe []stream.ChannelSubscription) er payload := WsPayload{ Method: "SUBSCRIBE", } - for i := range channelsToSubscribe { payload.Params = append(payload.Params, channelsToSubscribe[i].Channel) + if i%50 == 0 && i != 0 { + err := b.Websocket.Conn.SendJSONMessage(payload) + if err != nil { + return err + } + payload.Params = []string{} + } } - - err := b.Websocket.Conn.SendJSONMessage(payload) - if err != nil { - return err + if len(payload.Params) > 0 { + err := b.Websocket.Conn.SendJSONMessage(payload) + if err != nil { + return err + } } b.Websocket.AddSuccessfulSubscriptions(channelsToSubscribe...) return nil @@ -560,10 +567,19 @@ func (b *Binance) Unsubscribe(channelsToUnsubscribe []stream.ChannelSubscription } for i := range channelsToUnsubscribe { payload.Params = append(payload.Params, channelsToUnsubscribe[i].Channel) + if i%50 == 0 && i != 0 { + err := b.Websocket.Conn.SendJSONMessage(payload) + if err != nil { + return err + } + payload.Params = []string{} + } } - err := b.Websocket.Conn.SendJSONMessage(payload) - if err != nil { - return err + if len(payload.Params) > 0 { + err := b.Websocket.Conn.SendJSONMessage(payload) + if err != nil { + return err + } } b.Websocket.RemoveSuccessfulUnsubscriptions(channelsToUnsubscribe...) return nil diff --git a/exchanges/binance/binance_wrapper.go b/exchanges/binance/binance_wrapper.go index 902511d5..20f2433e 100644 --- a/exchanges/binance/binance_wrapper.go +++ b/exchanges/binance/binance_wrapper.go @@ -241,6 +241,7 @@ func (b *Binance) Setup(exch *config.ExchangeConfig) error { return b.Websocket.SetupNewConnection(stream.ConnectionSetup{ ResponseCheckTimeout: exch.WebsocketResponseCheckTimeout, ResponseMaxLimit: exch.WebsocketResponseMaxLimit, + RateLimit: wsRateLimitMilliseconds, }) }