1
0
镜像自地址 https://github.com/tuna/tunasync.git 已同步 2025-12-06 06:26:46 +00:00

fix(tunasync): connection leakage caused by http keep-alive

这个提交包含在:
bigeagle
2016-04-29 08:57:14 +08:00
父节点 d1981379a4
当前提交 2268eb3b0f
共有 3 个文件被更改,包括 68 次插入49 次删除

查看文件

@@ -2,7 +2,6 @@ package worker
import (
"bytes"
"crypto/tls"
"errors"
"fmt"
"html/template"
@@ -26,8 +25,8 @@ type Worker struct {
semaphore chan empty
schedule *scheduleQueue
httpServer *gin.Engine
tlsConfig *tls.Config
httpEngine *gin.Engine
httpClient *http.Client
}
// GetTUNASyncWorker returns a singalton worker
@@ -48,12 +47,12 @@ func GetTUNASyncWorker(cfg *Config) *Worker {
}
if cfg.Manager.CACert != "" {
tlsConfig, err := GetTLSConfig(cfg.Manager.CACert)
httpClient, err := CreateHTTPClient(cfg.Manager.CACert)
if err != nil {
logger.Error("Failed to init TLS config: %s", err.Error())
logger.Error("Error initializing HTTP client: %s", err.Error())
return nil
}
w.tlsConfig = tlsConfig
w.httpClient = httpClient
}
w.initJobs()
@@ -227,18 +226,25 @@ func (w *Worker) makeHTTPServer() {
c.JSON(http.StatusOK, gin.H{"msg": "OK"})
})
w.httpServer = s
w.httpEngine = s
}
func (w *Worker) runHTTPServer() {
addr := fmt.Sprintf("%s:%d", w.cfg.Server.Addr, w.cfg.Server.Port)
httpServer := &http.Server{
Addr: addr,
Handler: w.httpEngine,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
}
if w.cfg.Server.SSLCert == "" && w.cfg.Server.SSLKey == "" {
if err := w.httpServer.Run(addr); err != nil {
if err := httpServer.ListenAndServe(); err != nil {
panic(err)
}
} else {
if err := w.httpServer.RunTLS(addr, w.cfg.Server.SSLCert, w.cfg.Server.SSLKey); err != nil {
if err := httpServer.ListenAndServeTLS(w.cfg.Server.SSLCert, w.cfg.Server.SSLKey); err != nil {
panic(err)
}
}
@@ -345,7 +351,7 @@ func (w *Worker) registorWorker() {
URL: w.URL(),
}
if _, err := PostJSON(url, msg, w.tlsConfig); err != nil {
if _, err := PostJSON(url, msg, w.httpClient); err != nil {
logger.Error("Failed to register worker")
}
}
@@ -368,7 +374,7 @@ func (w *Worker) updateStatus(jobMsg jobMessage) {
ErrorMsg: jobMsg.msg,
}
if _, err := PostJSON(url, smsg, w.tlsConfig); err != nil {
if _, err := PostJSON(url, smsg, w.httpClient); err != nil {
logger.Error("Failed to update mirror(%s) status: %s", jobMsg.name, err.Error())
}
}
@@ -382,7 +388,7 @@ func (w *Worker) fetchJobStatus() []MirrorStatus {
w.Name(),
)
if _, err := GetJSON(url, &mirrorList, w.tlsConfig); err != nil {
if _, err := GetJSON(url, &mirrorList, w.httpClient); err != nil {
logger.Error("Failed to fetch job status: %s", err.Error())
}