Skip to content

Commit

Permalink
Merge pull request #18 from ycvk/issue-#16
Browse files Browse the repository at this point in the history
Issue #16
  • Loading branch information
ycvk authored May 30, 2024
2 parents e927d52 + 1ffd032 commit 6fa75f2
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 40 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ RUN go mod tidy
RUN make build-all
RUN upx -6 build/deeplx_linux_*

FROM alpine as final
FROM scratch as final
ARG TARGETOS
ARG TARGETARCH
WORKDIR /usr/local/bin/
Expand Down
4 changes: 2 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
翻译超大文本时,会自动做拆分并行翻译合并处理。

### 一键启动
`docker run -itd -p 8080:62155 neccen/deeplx-local:latest`
`docker run --pull=always -itd -p 8080:62155 neccen/deeplx-local:latest`


翻译地址:`http://localhost:8080/translate`
**翻译地址:**`http://localhost:8080/translate`

### 可选参数
- `360_api_key`[quake360](https://quake.360.net/quake/#/personal?tab=message)的api_key,可用于每日自动爬取更多的翻译接口。(有每日免费次数)
Expand Down
55 changes: 18 additions & 37 deletions service/balancer_deeplx.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"log"
"regexp"
"strings"
"sync"
"sync/atomic"
"time"
)
Expand Down Expand Up @@ -57,19 +56,6 @@ func NewLoadBalancer(vlist *[]string) TranslateService {
return lb
}

var (
trReqPool = sync.Pool{
New: func() interface{} {
return &domain.TranslateRequest{}
},
}
trRespPool = sync.Pool{
New: func() interface{} {
return &domain.TranslateResponse{}
},
}
)

func (lb *LoadBalancer) GetTranslateData(trReq domain.TranslateRequest) domain.TranslateResponse {
text := trReq.Text
textLength := len(text)
Expand Down Expand Up @@ -101,17 +87,13 @@ func (lb *LoadBalancer) GetTranslateData(trReq domain.TranslateRequest) domain.T

for _, part := range textParts {
s.Go(func() stream.Callback {
transReq := trReqPool.Get().(*domain.TranslateRequest)
transReq.Text = part
transReq.SourceLang = trReq.SourceLang
transReq.TargetLang = trReq.TargetLang

res := lb.sendRequest(*transReq)
trReqPool.Put(transReq)

res := lb.sendRequest(domain.TranslateRequest{
Text: part,
SourceLang: trReq.SourceLang,
TargetLang: trReq.TargetLang,
})
return func() {
results = append(results, res.Data)
trRespPool.Put(&res)
}
})
}
Expand All @@ -127,9 +109,7 @@ func (lb *LoadBalancer) GetTranslateData(trReq domain.TranslateRequest) domain.T
func (lb *LoadBalancer) sendRequest(trReq domain.TranslateRequest) domain.TranslateResponse {
ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second*5)
defer cancelFunc()

var once sync.Once
var result domain.TranslateResponse
resultChan := make(chan domain.TranslateResponse, 5)

contextPool := pool.New().WithContext(ctx).WithMaxGoroutines(5)
for i := 0; i < 5; i++ {
Expand All @@ -148,10 +128,8 @@ func (lb *LoadBalancer) sendRequest(trReq domain.TranslateRequest) domain.Transl
response.Body.Close()

if trResult.Code == 200 && len(trResult.Data) > 0 {
once.Do(func() {
result = trResult
cancelFunc()
})
resultChan <- trResult
cancelFunc()
} else {
server.isAvailable = false
lb.unavailableServers = append(lb.unavailableServers, server)
Expand All @@ -161,19 +139,22 @@ func (lb *LoadBalancer) sendRequest(trReq domain.TranslateRequest) domain.Transl
}

select {
case <-ctx.Done():
case result := <-resultChan:
return result
case <-ctx.Done():
return domain.TranslateResponse{}
}
}

func (lb *LoadBalancer) getServer() *Server {
for {
index := atomic.LoadUint32(&lb.index)
server := lb.Servers[index%uint32(len(lb.Servers))]
if server.isAvailable && atomic.CompareAndSwapUint32(&lb.index, index, index+1) {
return server
}
index := atomic.AddUint32(&lb.index, 1) - 1
server := lb.Servers[index%uint32(len(lb.Servers))]

for !server.isAvailable {
index = atomic.AddUint32(&lb.index, 1) - 1
server = lb.Servers[index%uint32(len(lb.Servers))]
}
return server
}

func (lb *LoadBalancer) startHealthCheck() {
Expand Down

0 comments on commit 6fa75f2

Please sign in to comment.