From 370ba13af3246374f584c350da46bbd162a3ca63 Mon Sep 17 00:00:00 2001 From: tianping526 <1553260215@qq.com> Date: Wed, 4 Feb 2026 14:37:06 +0800 Subject: [PATCH 1/2] feat: add configurable read and write buffer sizes for websocket connections --- taosWS/connection.go | 7 +++++++ taosWS/dsn.go | 14 +++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/taosWS/connection.go b/taosWS/connection.go index 827370d..5f29442 100644 --- a/taosWS/connection.go +++ b/taosWS/connection.go @@ -17,6 +17,7 @@ import ( "github.com/gorilla/websocket" jsoniter "github.com/json-iterator/go" + "github.com/taosdata/driver-go/v3/common" stmtCommon "github.com/taosdata/driver-go/v3/common/stmt" "github.com/taosdata/driver-go/v3/common/tdversion" @@ -86,6 +87,12 @@ func newTaosConn(cfg *Config) (*taosConn, error) { } endpoint := endpointUrl.String() dialer := common.DefaultDialer + if cfg.ReadBufferSize > 0 { + dialer.ReadBufferSize = cfg.ReadBufferSize + } + if cfg.WriteBufferSize > 0 { + dialer.WriteBufferSize = cfg.WriteBufferSize + } dialer.EnableCompression = cfg.EnableCompression ws, _, err := dialer.Dial(endpoint, nil) if err != nil { diff --git a/taosWS/dsn.go b/taosWS/dsn.go index 431529c..cf31039 100644 --- a/taosWS/dsn.go +++ b/taosWS/dsn.go @@ -37,6 +37,8 @@ type Config struct { Timezone *time.Location // Timezone for connection, e.g., "Asia%2FShanghai" or "UTC" BearerToken string // BearerToken for TSDB auth TotpCode string // TOTP code for TSDB TOTP auth + ReadBufferSize int // Read buffer size + WriteBufferSize int // Write buffer size } // NewConfig creates a new Config and sets default values. @@ -88,7 +90,7 @@ func ParseDSN(dsn string) (cfg *Config, err error) { if strings.ContainsRune(dsn[k+1:i], ')') { return nil, ErrInvalidDSNUnescaped } - //return nil, errInvalidDSNAddr + // return nil, errInvalidDSNAddr } addr := dsn[k+1 : i-1] host, port, err := net.SplitHostPort(addr) @@ -178,6 +180,16 @@ func parseDSNParams(cfg *Config, params string) (err error) { cfg.BearerToken = value case "totpCode": cfg.TotpCode = value + case "readBufferSize": + cfg.ReadBufferSize, err = strconv.Atoi(value) + if err != nil { + return &errors.TaosError{Code: 0xffff, ErrStr: "invalid readBufferSize value: " + value} + } + case "writeBufferSize": + cfg.WriteBufferSize, err = strconv.Atoi(value) + if err != nil { + return &errors.TaosError{Code: 0xffff, ErrStr: "invalid writeBufferSize value: " + value} + } default: // lazy init if cfg.Params == nil { From 72581da1085fd6ac7eeb9023f9065cbd434dca68 Mon Sep 17 00:00:00 2001 From: Link Tin <1553260215@qq.com> Date: Wed, 4 Feb 2026 14:58:25 +0800 Subject: [PATCH 2/2] refactor: combine these two case statements to reduce code duplication and improve maintainability Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- taosWS/dsn.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/taosWS/dsn.go b/taosWS/dsn.go index cf31039..dd7193c 100644 --- a/taosWS/dsn.go +++ b/taosWS/dsn.go @@ -180,15 +180,15 @@ func parseDSNParams(cfg *Config, params string) (err error) { cfg.BearerToken = value case "totpCode": cfg.TotpCode = value - case "readBufferSize": - cfg.ReadBufferSize, err = strconv.Atoi(value) + case "readBufferSize", "writeBufferSize": + val, err := strconv.Atoi(value) if err != nil { - return &errors.TaosError{Code: 0xffff, ErrStr: "invalid readBufferSize value: " + value} + return &errors.TaosError{Code: 0xffff, ErrStr: "invalid " + param[0] + " value: " + value} } - case "writeBufferSize": - cfg.WriteBufferSize, err = strconv.Atoi(value) - if err != nil { - return &errors.TaosError{Code: 0xffff, ErrStr: "invalid writeBufferSize value: " + value} + if param[0] == "readBufferSize" { + cfg.ReadBufferSize = val + } else { + cfg.WriteBufferSize = val } default: // lazy init