mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-14 07:26:47 +00:00
Binance: Fix websocket subscribe error with many currency pairs enabled (#670)
* Fix subscribe error with many currency pairs * Adds proper rate limit. Adds empty check. Co-authored-by: gloriousCode <scott.grant@thrasher.io> Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
This commit is contained in:
@@ -8,6 +8,8 @@ import (
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
||||
)
|
||||
|
||||
const wsRateLimitMilliseconds = 250
|
||||
|
||||
// withdrawals status codes description
|
||||
const (
|
||||
EmailSent = iota
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user