Skip to content

disconnected loop while waiting for redial only after first retry #38

Open
@franck34

Description

Code (from example, but use ws rather than wss)

The server is a raw ws nodejs app, working perfectly with a golang client using gorilla websocket.

package main

import (
	"context"
	"log"
	"time"

	"github.com/recws-org/recws"
)

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	ws := recws.RecConn{
		KeepAliveTimeout: 10 * time.Second,
	}
	ws.Dial("ws://192.168.56.101", nil)

	go func() {
		time.Sleep(2 * time.Second)
		cancel()
	}()

	for {
		select {
		case <-ctx.Done():
			go ws.Close()
			log.Printf("Websocket closed %s", ws.GetURL())
			return
		default:
			if !ws.IsConnected() {
				log.Printf("Websocket disconnected %s", ws.GetURL())
				continue
			}

			if err := ws.WriteMessage(1, []byte("Incoming")); err != nil {
				log.Printf("Error: WriteMessage %s", ws.GetURL())
				return
			}

			_, message, err := ws.ReadMessage()
			if err != nil {
				log.Printf("Error: ReadMessage %s", ws.GetURL())
				return
			}

			log.Printf("Success: %s", message)
		}
	}
}

14:25:30 => 14:25:32 = OK, waiting
14:25:32 => 14:25:34 = disconnected loop ?
14:25:34 = closing

2021/03/17 14:25:30 websocket: bad handshake
2021/03/17 14:25:30 Dial: will try again in 2s seconds.
2021/03/17 14:25:32 Websocket disconnected ws://192.168.56.101
2021/03/17 14:25:32 Websocket disconnected ws://192.168.56.101
2021/03/17 14:25:32 Websocket disconnected ws://192.168.56.101
.....
2021/03/17 14:25:34 Websocket disconnected ws://192.168.56.101
2021/03/17 14:25:34 Websocket disconnected ws://192.168.56.101
2021/03/17 14:25:34 Websocket disconnected ws://192.168.56.101
2021/03/17 14:25:34 Websocket disconnected ws://192.168.56.101
2021/03/17 14:25:34 Websocket disconnected ws://192.168.56.101
2021/03/17 14:25:34 Websocket disconnected ws://192.168.56.101
2021/03/17 14:25:34 Websocket closed ws://192.168.56.101

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions