优化 newHttpContext 性能

This commit is contained in:
huangmengzhu
2022-12-01 18:12:25 +08:00
parent 2e59bbaea4
commit c9379f1793
9 changed files with 144 additions and 110 deletions

View File

@@ -1,49 +1,71 @@
package http_context
import (
"github.com/valyala/fasthttp"
"bytes"
"fmt"
http_service "github.com/eolinker/eosc/eocontext/http-context"
"github.com/valyala/fasthttp"
)
var _ http_service.IRequest = (*ProxyRequest)(nil)
type ProxyRequest struct {
*RequestReader
RequestReader
}
func (r *ProxyRequest) clone() *ProxyRequest {
return NewProxyRequest(r.Request(), r.remoteAddr)
}
//func (r *ProxyRequest) clone() *ProxyRequest {
// return NewProxyRequest(r.Request(), r.remoteAddr)
//}
func (r *ProxyRequest) Finish() error {
fasthttp.ReleaseRequest(r.req)
r.RequestReader.Finish()
return nil
}
func (r *ProxyRequest) Header() http_service.IHeaderWriter {
return r.headers
return &r.headers
}
func (r *ProxyRequest) Body() http_service.IBodyDataWriter {
return r.body
return &r.body
}
func (r *ProxyRequest) URI() http_service.IURIWriter {
return r.uri
return &r.uri
}
func (r *ProxyRequest) SetPath(s string) {
r.Request().URI().SetPath(s)
}
var (
xforwardedforKey = []byte("x-forwarded-for")
)
func NewProxyRequest(request *fasthttp.Request, remoteAddr string) *ProxyRequest {
func (r *ProxyRequest) reset(request *fasthttp.Request, remoteAddr string) {
proxyRequest := fasthttp.AcquireRequest()
request.CopyTo(proxyRequest)
return &ProxyRequest{
RequestReader: NewRequestReader(proxyRequest, remoteAddr),
forwardedFor := proxyRequest.Header.PeekBytes(xforwardedforKey)
if len(forwardedFor) > 0 {
if i := bytes.IndexByte(forwardedFor, ','); i > 0 {
r.realIP = string(forwardedFor[:i])
} else {
r.realIP = string(forwardedFor)
}
proxyRequest.Header.Set("x-forwarded-for", fmt.Sprint(string(forwardedFor), ",", r.remoteAddr))
} else {
proxyRequest.Header.Set("x-forwarded-for", r.remoteAddr)
r.realIP = r.remoteAddr
}
r.RequestReader.reset(proxyRequest, remoteAddr)
}
//func NewProxyRequest(request *fasthttp.Request, remoteAddr string) *ProxyRequest {
// proxyRequest := fasthttp.AcquireRequest()
// request.CopyTo(proxyRequest)
// return &ProxyRequest{
// RequestReader: NewRequestReader(proxyRequest, remoteAddr),
// }
//}
func (r *ProxyRequest) SetMethod(s string) {
r.Request().Header.SetMethod(s)
}