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
}