HuobiRDCenter / huobi_Golang

Go SDK for Huobi Spot API
https://www.htx.com/zh-cn/opend/newApiPages/
Apache License 2.0
176 stars 86 forks source link

Infinite reconnecting loop #28

Open filinvadim opened 3 years ago

filinvadim commented 3 years ago

Guys you don't reset p.lastReceivedTime variable while reconnect so that's cause infinite reconnecting loop.

eynzhang commented 3 years ago

@filinvadim thanks for your question, p.lastReceivedTime will not be reset (=time.Now()) until it reads something from remote server. If you see infinitie reconnecting loop, that’s indicate you didn’t successfully read message from remote server after reconnecting before the timeout. The default timeout (ReconnectWaitSecond) is 60 (1 min).

If you change ReconnectWaitSecond longer, does it resolve your problem?

filinvadim commented 3 years ago

Reading loop won't have time to get message because connection will be immediately closed due p.lastReceivedTime exceeding. Please reset p.lastReceivedTime. Guys, come on! It's obvious!

filinvadim commented 3 years ago

Off-top: what the idea of reconnecting for V2 client? Reconnecting logic doesn't do re-subscription. So basically it's useless.

cj60205 commented 3 years ago

In commit 73530f6, p.startReadLoop() is called only in Connect(). After reconnected, readLoop() has been stopped in disconnectWebSocket() and never be launched again.

eynzhang commented 3 years ago

@cj60205 Yes, that’s the reconnect failure issue introduced. Now it is resolved in latest master branch.

eynzhang commented 3 years ago

Reading loop won't have time to get message because connection will be immediately closed due p.lastReceivedTime exceeding. Please reset p.lastReceivedTime. Guys, come on! It's obvious!

Reading loop won't have time to get message because connection will be immediately closed due p.lastReceivedTime exceeding. Please reset p.lastReceivedTime. Guys, come on! It's obvious!

I understand the issue but I mentioned incorrect timeout settings in earlier reply. The tickerLoop will check the timeout every 5 seconds, which is defined in TimerIntervalSecond = 5, if you increase TimerIntervalSecond, is that helpful?

We want to understand the issue first and then resolve that. One of the soluiton is as you proposed, reset the p.lastReceivedTime once the websocket connected. So please confirm above work around is working for you.

filinvadim commented 3 years ago

It won't work. Since lastReceivedTime wasn't reset elapsedSecond will be always bigger than ReconnectWaitSecond.

My WS connection may be idle for hours. Therefore client will start reconnect infinitely.

if appropriate i can propose you all different approach: https://github.com/filinvadim/stubborn