diff --git a/message.go b/message.go
index 2a78277..4036ad9 100644
--- a/message.go
+++ b/message.go
@@ -10,7 +10,7 @@
 )
 
 type MessageWriter struct {
-	FuncNo      int `json: "funcno"`
+	FuncNo      int `json:"funcno"`
 	Attributes  map[string]interface{}
 	ColumnNames []string
 	ColumnDescs []string
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
