Skip to content

Commit

Permalink
update: 使用正则异步去处理url
Browse files Browse the repository at this point in the history
  • Loading branch information
ycvk committed May 8, 2024
1 parent 7dedc37 commit fe04856
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 29 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/release_binary.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,4 @@ jobs:
goos: ${{ matrix.goos }}
goarch: ${{ matrix.goarch }}
binary_name: "deeplx"
extra_files: url.txt
executable_compression: upx --best
extra_files: url.txt
27 changes: 15 additions & 12 deletions init.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ import (
"errors"
"fmt"
"github.com/imroc/req/v3"
lop "github.com/samber/lo/parallel"
"github.com/sourcegraph/conc/pool"
"log"
"net/http"
"os"
"os/exec"
"os/signal"
"regexp"
"strconv"
"strings"
"syscall"
Expand Down Expand Up @@ -98,19 +100,20 @@ func getValidURLs() []string {
}

func processUrls(urls []string) []string {
for i := range urls {
urls[i] = strings.TrimSpace(urls[i])
if !strings.HasSuffix(urls[i], "/translate") {
if strings.HasSuffix(urls[i], "/") {
urls[i] += "translate"
} else {
urls[i] += "/translate"
}
}
if !strings.HasPrefix(urls[i], "http") {
urls[i] = "http://" + urls[i]
// 使用正则表达式处理 URL 后缀
suffixPattern := regexp.MustCompile(`(?:/translate)?/?$`)
// 使用正则表达式处理 URL 前缀
prefixPattern := regexp.MustCompile("^(http|https)://")

urls = lop.Map(urls, func(url string, _ int) string {
u := strings.TrimSpace(url)
u = suffixPattern.ReplaceAllString(u, "/translate")
if prefixPattern.MatchString(u) {
return u
}
}
return "http://" + u
})

// 去重
distinctURLs(&urls)
// 保存处理后的URL
Expand Down
4 changes: 2 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ func initServer() {
// 注册服务
gin.SetMode(gin.ReleaseMode)
r := gin.Default()
lxService := service.NewDeepLXService(&urLs)
balancerService := service.NewLoadBalancer(lxService.(*service.DeepLXService))
//lxService := service.NewDeepLXService(&urLs)
balancerService := service.NewLoadBalancer(&urLs)
lxHandler := web.NewDeepLXHandler(balancerService)
lxHandler.RegisterRoutes(r)

Expand Down
31 changes: 18 additions & 13 deletions service/balancer_deeplx.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package service
import (
"context"
"deeplx-local/domain"
"github.com/imroc/req/v3"
lop "github.com/samber/lo/parallel"
"github.com/sourcegraph/conc/pool"
"github.com/sourcegraph/conc/stream"
"log"
Expand All @@ -22,19 +24,22 @@ type Server struct {
}

type LoadBalancer struct {
Servers []*Server
mutex sync.Mutex
deepLXService *DeepLXService
re *regexp.Regexp
Servers []*Server
mutex sync.Mutex
re *regexp.Regexp
client *req.Client
}

// NewLoadBalancer 负载均衡 装饰器模式包了一层service
func NewLoadBalancer(service *DeepLXService) TranslateService {
servers := make([]*Server, len(*service.validList))
for i, url := range *service.validList {
servers[i] = &Server{URL: url, Weight: 1, CurrentWeight: 1}
// NewLoadBalancer 负载均衡
func NewLoadBalancer(vlist *[]string) TranslateService {
servers := lop.Map(*vlist, func(item string, index int) *Server {
return &Server{URL: item, Weight: 1, CurrentWeight: 1}
})
return &LoadBalancer{
Servers: servers,
client: req.NewClient().SetTimeout(2 * time.Second),
re: regexp.MustCompile(`[^.!?]+[.!?]`),
}
return &LoadBalancer{Servers: servers, deepLXService: service, re: regexp.MustCompile(`[^.!?]+[.!?]`)}
}

func (lb *LoadBalancer) GetTranslateData(trReq domain.TranslateRequest) domain.TranslateResponse {
Expand Down Expand Up @@ -68,12 +73,12 @@ func (lb *LoadBalancer) GetTranslateData(trReq domain.TranslateRequest) domain.T

for _, part := range textParts {
s.Go(func() stream.Callback {
req := domain.TranslateRequest{
transReq := domain.TranslateRequest{
Text: part,
SourceLang: trReq.SourceLang,
TargetLang: trReq.TargetLang,
}
res := lb.sendRequest(req)
res := lb.sendRequest(transReq)
return func() {
results = append(results, res.Data)
}
Expand All @@ -99,7 +104,7 @@ func (lb *LoadBalancer) sendRequest(trReq domain.TranslateRequest) domain.Transl
server := lb.getServer()
var trResult domain.TranslateResponse
start := time.Now()
response, err := lb.deepLXService.client.R().
response, err := lb.client.R().
SetContext(ctx).
SetBody(trReq).
SetSuccessResult(&trResult).
Expand Down

0 comments on commit fe04856

Please sign in to comment.