fixed websocket default dialer (fixed concurrency)
This commit is contained in:
@@ -210,13 +210,13 @@ func (rc *RecConn) setDefaultHandshakeTimeout() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rc *RecConn) setDefaultDialer() {
|
func (rc *RecConn) setDefaultDialer(handshakeTimeout time.Duration) {
|
||||||
handshakeTimeout := rc.getHandshakeTimeout()
|
|
||||||
rc.mu.Lock()
|
rc.mu.Lock()
|
||||||
defer rc.mu.Unlock()
|
defer rc.mu.Unlock()
|
||||||
|
|
||||||
rc.dialer = websocket.DefaultDialer
|
rc.dialer = &websocket.Dialer{
|
||||||
rc.dialer.HandshakeTimeout = handshakeTimeout
|
HandshakeTimeout: handshakeTimeout,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rc *RecConn) getHandshakeTimeout() time.Duration {
|
func (rc *RecConn) getHandshakeTimeout() time.Duration {
|
||||||
@@ -244,7 +244,7 @@ func (rc *RecConn) Dial(urlStr string, reqHeader http.Header) {
|
|||||||
rc.setDefaultRecIntvlMax()
|
rc.setDefaultRecIntvlMax()
|
||||||
rc.setDefaultRecIntvlFactor()
|
rc.setDefaultRecIntvlFactor()
|
||||||
rc.setDefaultHandshakeTimeout()
|
rc.setDefaultHandshakeTimeout()
|
||||||
rc.setDefaultDialer()
|
rc.setDefaultDialer(rc.getHandshakeTimeout())
|
||||||
|
|
||||||
// Connect
|
// Connect
|
||||||
go rc.connect()
|
go rc.connect()
|
||||||
@@ -268,19 +268,28 @@ func (rc *RecConn) getNonVerbose() bool {
|
|||||||
return rc.NonVerbose
|
return rc.NonVerbose
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rc *RecConn) connect() {
|
func (rc *RecConn) getBackoff() *backoff.Backoff {
|
||||||
b := &backoff.Backoff{
|
rc.mu.RLock()
|
||||||
|
defer rc.mu.RUnlock()
|
||||||
|
|
||||||
|
return &backoff.Backoff{
|
||||||
Min: rc.RecIntvlMin,
|
Min: rc.RecIntvlMin,
|
||||||
Max: rc.RecIntvlMax,
|
Max: rc.RecIntvlMax,
|
||||||
Factor: rc.RecIntvlFactor,
|
Factor: rc.RecIntvlFactor,
|
||||||
Jitter: true,
|
Jitter: true,
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rc *RecConn) connect() {
|
||||||
|
b := rc.getBackoff()
|
||||||
|
|
||||||
rand.Seed(time.Now().UTC().UnixNano())
|
rand.Seed(time.Now().UTC().UnixNano())
|
||||||
|
|
||||||
for {
|
for {
|
||||||
nextItvl := b.Duration()
|
nextItvl := b.Duration()
|
||||||
|
rc.mu.RLock()
|
||||||
wsConn, httpResp, err := rc.dialer.Dial(rc.url, rc.reqHeader)
|
wsConn, httpResp, err := rc.dialer.Dial(rc.url, rc.reqHeader)
|
||||||
|
rc.mu.RUnlock()
|
||||||
|
|
||||||
rc.mu.Lock()
|
rc.mu.Lock()
|
||||||
rc.Conn = wsConn
|
rc.Conn = wsConn
|
||||||
|
|||||||
Reference in New Issue
Block a user