2
0

fixed websocket default dialer (fixed concurrency)

This commit is contained in:
Lucas Löffel
2018-10-09 14:58:34 +02:00
parent 7b4667c944
commit f463fb2497
+16 -7
View File
@@ -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