Skip to content

Commit e8f8099

Browse files
author
闫明
committed
Release 0.1.3
1 parent 55f567b commit e8f8099

File tree

4 files changed

+73
-5
lines changed

4 files changed

+73
-5
lines changed

beans/ab_config.go

+14
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,22 @@ type ABTestConfig struct {
3939
*/
4040
APIUrl string
4141

42+
/*
43+
HTTP连接参数
44+
*/
45+
HTTPTransportParam HTTPTransportParam
46+
4247
/**
4348
用于 SDK 埋点 SensorsAnalytics
4449
*/
4550
SensorsAnalytics sensorsanalytics.SensorsAnalytics
4651
}
52+
53+
type HTTPTransportParam struct {
54+
MaxIdleConnsPerHost int
55+
MaxIdleConns int
56+
MaxConnsPerHost int
57+
IdleConnTimeoutMilliSeconds int
58+
DialTimeoutMilliSeconds int
59+
DialKeepAliveMilliSeconds int
60+
}

beans/request_params.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package beans
22

3-
import "time"
4-
53
type RequestParam struct {
64
// 试验变量名
75
ParamName string
@@ -16,7 +14,7 @@ type RequestParam struct {
1614
CustomIDs map[string]interface{}
1715

1816
// 网络请求超时时间,单位 ms,默认 3s
19-
TimeoutMilliseconds time.Duration
17+
TimeoutMilliseconds int
2018

2119
// 是否自动采集 A/B Testing 埋点事件
2220
EnableAutoTrackABEvent bool

sensors_abtesting.go

+41-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
)
99

1010
const (
11-
SDK_VERSION = "0.1.2"
11+
SDK_VERSION = "0.1.3"
1212
LIB_NAME = "Golang"
1313
)
1414

@@ -158,5 +158,45 @@ func initConfig(abConfig beans.ABTestConfig) (error, beans.ABTestConfig) {
158158
config.EnableRecordRequestCostTime = abConfig.EnableRecordRequestCostTime
159159
config.APIUrl = abConfig.APIUrl
160160
initCache(config)
161+
utils.InitTransport(getHTTPTransPortParam(abConfig))
161162
return nil, config
162163
}
164+
165+
func getHTTPTransPortParam(abConfig beans.ABTestConfig) beans.HTTPTransportParam {
166+
param := beans.HTTPTransportParam{}
167+
if abConfig.HTTPTransportParam.MaxIdleConnsPerHost <= 0 {
168+
param.MaxIdleConnsPerHost = 5
169+
} else {
170+
param.MaxIdleConnsPerHost = abConfig.HTTPTransportParam.MaxIdleConnsPerHost
171+
}
172+
if abConfig.HTTPTransportParam.MaxIdleConns <= 0 {
173+
param.MaxIdleConns = 20
174+
} else {
175+
param.MaxIdleConns = abConfig.HTTPTransportParam.MaxIdleConns
176+
}
177+
178+
if abConfig.HTTPTransportParam.MaxConnsPerHost <= 0 {
179+
param.MaxConnsPerHost = 200
180+
} else {
181+
param.MaxConnsPerHost = abConfig.HTTPTransportParam.MaxConnsPerHost
182+
}
183+
184+
if abConfig.HTTPTransportParam.IdleConnTimeoutMilliSeconds <= 0 {
185+
param.IdleConnTimeoutMilliSeconds = 30 * 1000
186+
} else {
187+
param.IdleConnTimeoutMilliSeconds = abConfig.HTTPTransportParam.IdleConnTimeoutMilliSeconds
188+
}
189+
190+
if abConfig.HTTPTransportParam.DialTimeoutMilliSeconds <= 0 {
191+
param.DialTimeoutMilliSeconds = 30 * 1000
192+
} else {
193+
param.DialTimeoutMilliSeconds = abConfig.HTTPTransportParam.DialTimeoutMilliSeconds
194+
}
195+
196+
if abConfig.HTTPTransportParam.DialKeepAliveMilliSeconds <= 0 {
197+
param.DialKeepAliveMilliSeconds = 30 * 1000
198+
} else {
199+
param.DialKeepAliveMilliSeconds = abConfig.HTTPTransportParam.DialKeepAliveMilliSeconds
200+
}
201+
return param
202+
}

utils/network.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,28 @@ import (
77
"fmt"
88
"github.com/sensorsdata/abtesting-sdk-go/beans"
99
"io/ioutil"
10+
"net"
1011
"net/http"
1112
"strconv"
1213
"strings"
1314
"time"
1415
)
1516

17+
var httpTransport = &http.Transport{}
18+
19+
func InitTransport(httpTrans beans.HTTPTransportParam) {
20+
httpTransport = &http.Transport{
21+
DialContext: (&net.Dialer{
22+
Timeout: time.Duration(httpTrans.DialTimeoutMilliSeconds) * time.Millisecond,
23+
KeepAlive: time.Duration(httpTrans.DialKeepAliveMilliSeconds) * time.Millisecond,
24+
}).DialContext,
25+
MaxIdleConns: httpTrans.MaxIdleConns,
26+
MaxIdleConnsPerHost: httpTrans.MaxIdleConnsPerHost,
27+
MaxConnsPerHost: httpTrans.MaxConnsPerHost,
28+
IdleConnTimeout: time.Duration(httpTrans.IdleConnTimeoutMilliSeconds) * time.Millisecond,
29+
}
30+
}
31+
1632
func RequestExperiment(url string, requestPrams map[string]interface{}, to time.Duration, enableRecordRequestCostTime bool) (Response, error) {
1733
var resp *http.Response
1834

@@ -24,7 +40,7 @@ func RequestExperiment(url string, requestPrams map[string]interface{}, to time.
2440
req.Header.Add("X-AB-Request-Start-Time", fmt.Sprintf("%v", abRequestStartTime))
2541
req.Header.Add("Content-Type", "application/json")
2642

27-
client := &http.Client{Timeout: to}
43+
client := &http.Client{Timeout: to, Transport: httpTransport}
2844
resp, err := client.Do(req)
2945

3046
if enableRecordRequestCostTime {

0 commit comments

Comments
 (0)