diff --git a/webservice.go b/webservice.go
index 43b2e87..ead20d5 100644
--- a/webservice.go
+++ b/webservice.go
@@ -16,17 +16,19 @@
 	"net/url"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 )
 
 type WebSession struct {
-	AppId          string
-	TermId         string
-	Appsecret      string
-	BaseUrl        string
-	DefaultTimeout int
-	session_key    string
-	ssl_verify     bool
+	AppId              string
+	TermId             string
+	Appsecret          string
+	BaseUrl            string
+	DefaultTimeout     int
+	session_key        string
+	ssl_verify         bool
+	httpConnectionPool sync.Pool
 }
 
 func safe_get_json_int(value interface{}) int {
@@ -83,7 +85,9 @@
 }
 
 func (w *WebSession) DoGet(uri string, params map[string]string) (*http.Response, error) {
-	client := w.NewClient(3)
+	transport := w.httpConnectionPool.Get().(*http.Transport)
+	defer w.httpConnectionPool.Put(transport)
+	client := &http.Client{Transport: transport, Timeout: time.Duration(3) * time.Second}
 
 	full_url := w.BaseUrl + uri
 
@@ -115,34 +119,37 @@
 	return w.SignWithKey(w.Appsecret, message)
 }
 
-func (w *WebSession) NewClient(timeout int) *http.Client {
+func newTransport(baseurl string, ssl_verify bool) *http.Transport {
 	var transport http.Transport
-	if strings.HasPrefix(w.BaseUrl, "https://") {
+	if strings.HasPrefix(baseurl, "https://") {
 		var b bool
-		if w.ssl_verify {
+		if ssl_verify {
 			b = false
 		} else {
 			b = true
 		}
-		transport = http.Transport{MaxIdleConnsPerHost: 0, DisableKeepAlives: true,
+		transport = http.Transport{MaxIdleConnsPerHost: 0,
 			TLSClientConfig:     &tls.Config{InsecureSkipVerify: b},
-			TLSHandshakeTimeout: time.Duration(timeout) * time.Second,
+			TLSHandshakeTimeout: time.Duration(1) * time.Second,
 			Dial: func(network, addr string) (net.Conn, error) {
 				default_timeout := time.Duration(1) * time.Second
 				return net.DialTimeout(network, addr, default_timeout)
 			}}
-	} else if strings.HasPrefix(w.BaseUrl, "http://") {
-		transport = http.Transport{MaxIdleConnsPerHost: 0, DisableKeepAlives: true,
+	} else if strings.HasPrefix(baseurl, "http://") {
+		transport = http.Transport{MaxIdleConnsPerHost: 0,
 			Dial: func(network, addr string) (net.Conn, error) {
 				default_timeout := time.Duration(1) * time.Second
 				return net.DialTimeout(network, addr, default_timeout)
 			}}
 	}
-	return &http.Client{Transport: &transport, Timeout: time.Duration(timeout) * time.Second}
+	log.Debugf("创建新连接")
+	return &transport
 }
 
 func (w *WebSession) DoPost(uri string, param map[string]string) (*http.Response, error) {
-	client := w.NewClient(3)
+	transport := w.httpConnectionPool.Get().(*http.Transport)
+	defer w.httpConnectionPool.Put(transport)
+	client := &http.Client{Transport: transport, Timeout: time.Duration(3) * time.Second}
 	param["app_id"] = w.AppId
 	param["term_id"] = w.TermId
 	param["sign_method"] = "HMAC"
@@ -183,7 +190,10 @@
 		TermId:         termid,
 		BaseUrl:        baseurl,
 		DefaultTimeout: timeout,
-		ssl_verify:     sslVerify}
+		ssl_verify:     sslVerify,
+		httpConnectionPool: sync.Pool{New: func() interface{} {
+			return newTransport(baseurl, sslVerify)
+		}}}
 }
 
 func (w *WebSession) getAuthToken() (string, error) {
@@ -286,7 +296,9 @@
 
 func (w *WebSession) CallService2(path string, params map[string]interface{}, timeout int,
 	sign_field ...string) (response *ServiceResponse, err error) {
-	client := w.NewClient(timeout)
+	transport := w.httpConnectionPool.Get().(*http.Transport)
+	defer w.httpConnectionPool.Put(transport)
+	client := http.Client{Transport: transport, Timeout: time.Duration(timeout) * time.Second}
 	err = nil
 	params["app_id"] = w.AppId
 	params["term_id"] = w.TermId
