httpCtx 副本包

This commit is contained in:
chenjiekun
2023-03-02 15:31:42 +08:00
parent e9888ae533
commit 44678168a4
11 changed files with 1205 additions and 32 deletions

View File

@@ -3,6 +3,7 @@ package http_context
import (
"context"
"fmt"
http_context_copy "github.com/eolinker/apinto/node/http-context/http-context-copy"
"net"
"strings"
"time"
@@ -189,41 +190,17 @@ func (ctx *HttpContext) Clone() (eoscContext.EoContext, error) {
return nil, fmt.Errorf("%s %w", "HttpContext", eoscContext.ErrEoCtxUnCloneable)
}
cloneCtx := pool.Get().(*HttpContext)
remoteAddr := ctx.fastHttpRequestCtx.RemoteAddr().String()
ctxCopy := http_context_copy.NewContextCopy(ctx.fastHttpRequestCtx, ctx.requestID, ctx.port, ctx.labels)
cloneReq := fasthttp.AcquireRequest()
ctx.proxyRequest.Request().CopyTo(cloneReq)
cloneResp := fasthttp.AcquireResponse()
ctx.response.Response.CopyTo(cloneResp)
ctxCopy.SetCompleteHandler(ctx.completeHandler)
ctxCopy.SetFinish(ctx.finishHandler)
ctxCopy.SetUpstreamHostHandler(ctx.upstreamHostHandler)
ctxCopy.SetApp(ctx.app)
ctxCopy.SetBalance(ctx.balance)
//cloneRequestCtx := new(fasthttp.RequestCtx)
//cloneRequestCtx.Request = *cloneReq
//cloneRequestCtx.Response = *cloneResp
cloneCtx.fastHttpRequestCtx = ctx.fastHttpRequestCtx //TODO
//Ctx set retry,timeout TODO
cloneCtx.requestID = ctx.requestID //TODO
cloneCtx.requestReader.reset(cloneReq, remoteAddr)
cloneCtx.proxyRequest.reset(cloneReq, remoteAddr)
cloneCtx.proxyRequests = cloneCtx.proxyRequests[:0]
cloneCtx.response.reset(cloneResp)
cloneCtx.port = ctx.port
cloneCtx.ctx = ctx.ctx
cloneCtx.completeHandler = ctx.completeHandler
cloneCtx.finishHandler = ctx.finishHandler
cloneCtx.upstreamHostHandler = ctx.upstreamHostHandler
cloneCtx.app = ctx.app
cloneCtx.balance = ctx.balance
cLabels := make(map[string]string, len(ctx.labels))
for k, v := range ctx.labels {
cLabels[k] = v
}
cloneCtx.labels = cLabels
return cloneCtx, nil
return ctxCopy, nil
}
// NewContext 创建Context