Files
ygxbnet 73a7d26816
构建上传工具 / build-tool (push) Successful in 1m46s
refactor(uploader): 优化文件上传并发处理逻辑
- 将初始化连接池的并发方式改为waitgroup控制的goroutine池
- 调整文件处理时的channel缓冲区大小从100增加到200
- 移除不必要的sync.WaitGroup变量声明
- 修改进度计算逻辑,确保上传完成时进度显示为100%
- 添加对processLines函数的功能注释
- 优化上下文取消时的资源清理流程,及时关闭channel
2026-04-28 15:43:02 +08:00

85 lines
1.4 KiB
Go

package api
import (
"context"
"dypid-client/internal/config"
"fmt"
"io"
"net/http"
"net/url"
"sync"
"time"
)
var httpClient = &http.Client{
Transport: &http.Transport{
MaxIdleConns: 500,
MaxIdleConnsPerHost: 500,
IdleConnTimeout: 30 * time.Minute,
},
Timeout: 30 * time.Second,
}
var limit chan struct{}
func init() {
//限制同时请求数为500
limit = make(chan struct{}, 500)
}
// InitConn 创建连接池
func InitConn() {
wg := &sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Go(func() {
for i := 0; i < 50; i++ {
resp, err := httpClient.Get(config.APPConfig.Url + "/api/test")
if err != nil {
fmt.Println(err)
return
}
defer func() {
io.Copy(io.Discard, resp.Body)
resp.Body.Close()
}()
}
})
}
wg.Wait()
}
func UploadDataToServer(ctx context.Context, data string) error {
limit <- struct{}{}
defer func() {
<-limit
}()
params := url.Values{}
params.Set("token", config.APPConfig.Token)
params.Set("data", data)
//http://127.0.0.1:8080/api/data?token=123456&data=123456
request, err := http.NewRequest(
"POST",
config.APPConfig.Url+"/api/data?"+params.Encode(),
nil,
)
if err != nil {
return err
}
request.WithContext(ctx)
resp, err := httpClient.Do(request)
if err != nil {
return err
}
defer func() {
io.Copy(io.Discard, resp.Body)
resp.Body.Close()
}()
return err
}