func NewConnWebSocket()

in gdbclient/internal/pool/conn.go [64:104]


func NewConnWebSocket(opt *Options) (*ConnWebSocket, error) {
	dialer := websocket.Dialer{
		WriteBufferSize:  1024 * 8,
		ReadBufferSize:   1024 * 8,
		HandshakeTimeout: 5 * time.Second,
	}

	netConn, _, err := dialer.Dial(opt.GdbUrl, http.Header{})
	if err != nil {
		return nil, err
	}

	// disable system tcp-keepAlive
	if tcp, ok := netConn.UnderlyingConn().(*net.TCPConn); ok {
		if err := tcp.SetKeepAlive(false); err != nil {
			internal.Logger.Error("set keepAlive failed", zap.Error(err))
		}
	}

	cn := &ConnWebSocket{
		opt:              opt,
		netConn:          netConn,
		createdAt:        time.Now(),
		closeCn:          make(chan struct{}),
		pendingResponses: &sync.Map{},
		lastIoError:      errConnClosed,
		maxInProcess:     int32(opt.MaxInProcessPerConn),
	}

	cn.setUsedAt(time.Now())

	// connect workers
	if opt.PingInterval > 0 {
		go cn.connCheck(opt.PingInterval)
	}
	go cn.readResponse()

	internal.Logger.Info("create connect", zap.String("url", opt.GdbUrl),
		zap.Int("concurrent", opt.MaxInProcessPerConn), zapPtr(cn), zap.Duration("pingInterval", opt.PingInterval))
	return cn, nil
}