mirror of
https://github.com/eolinker/apinto
synced 2025-10-18 06:40:46 +08:00
优化 newHttpContext 性能
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user