From 3da119efbafc9515b1b2b79e042d3baa7e0b5267 Mon Sep 17 00:00:00 2001 From: JustSong Date: Sun, 23 Jul 2023 15:18:58 +0800 Subject: [PATCH] perf: reuse http client to reduce delay --- controller/channel-billing.go | 3 +-- controller/channel-test.go | 3 +-- controller/relay-image.go | 3 +-- controller/relay-openai.go | 2 +- controller/relay-text.go | 9 +++++++-- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/controller/channel-billing.go b/controller/channel-billing.go index 894af426..46262f6c 100644 --- a/controller/channel-billing.go +++ b/controller/channel-billing.go @@ -85,7 +85,6 @@ func GetAuthHeader(token string) http.Header { } func GetResponseBody(method, url string, channel *model.Channel, headers http.Header) ([]byte, error) { - client := &http.Client{} req, err := http.NewRequest(method, url, nil) if err != nil { return nil, err @@ -93,7 +92,7 @@ func GetResponseBody(method, url string, channel *model.Channel, headers http.He for k := range headers { req.Header.Add(k, headers.Get(k)) } - res, err := client.Do(req) + res, err := httpClient.Do(req) if err != nil { return nil, err } diff --git a/controller/channel-test.go b/controller/channel-test.go index fad5de8f..4225dd6c 100644 --- a/controller/channel-test.go +++ b/controller/channel-test.go @@ -45,8 +45,7 @@ func testChannel(channel *model.Channel, request ChatRequest) (error, *OpenAIErr req.Header.Set("Authorization", "Bearer "+channel.Key) } req.Header.Set("Content-Type", "application/json") - client := &http.Client{} - resp, err := client.Do(req) + resp, err := httpClient.Do(req) if err != nil { return err, nil } diff --git a/controller/relay-image.go b/controller/relay-image.go index 7a37be80..de623288 100644 --- a/controller/relay-image.go +++ b/controller/relay-image.go @@ -109,8 +109,7 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode req.Header.Set("Content-Type", c.Request.Header.Get("Content-Type")) req.Header.Set("Accept", c.Request.Header.Get("Accept")) - client := &http.Client{} - resp, err := client.Do(req) + resp, err := httpClient.Do(req) if err != nil { return errorWrapper(err, "do_request_failed", http.StatusInternalServerError) } diff --git a/controller/relay-openai.go b/controller/relay-openai.go index a3a95af3..2bcb99dc 100644 --- a/controller/relay-openai.go +++ b/controller/relay-openai.go @@ -115,7 +115,7 @@ func openaiHandler(c *gin.Context, resp *http.Response, consumeQuota bool) (*Ope } // We shouldn't set the header before we parse the response body, because the parse part may fail. // And then we will have to send an error response, but in this case, the header has already been set. - // So the client will be confused by the response. + // So the httpClient will be confused by the response. // For example, Postman will report error, and we cannot check the response at all. for k, v := range resp.Header { c.Writer.Header().Set(k, v[0]) diff --git a/controller/relay-text.go b/controller/relay-text.go index 6bf86bf9..8dfdf6e1 100644 --- a/controller/relay-text.go +++ b/controller/relay-text.go @@ -22,6 +22,12 @@ const ( APITypeZhipu ) +var httpClient *http.Client + +func init() { + httpClient = &http.Client{} +} + func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode { channelType := c.GetInt("channel") tokenId := c.GetInt("token_id") @@ -244,8 +250,7 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode { req.Header.Set("Content-Type", c.Request.Header.Get("Content-Type")) req.Header.Set("Accept", c.Request.Header.Get("Accept")) //req.Header.Set("Connection", c.Request.Header.Get("Connection")) - client := &http.Client{} - resp, err := client.Do(req) + resp, err := httpClient.Do(req) if err != nil { return errorWrapper(err, "do_request_failed", http.StatusInternalServerError) }