mirror of
https://github.com/infinite-iroha/touka.git
synced 2026-02-03 00:41:10 +08:00
add TempSkippedNodesPool
This commit is contained in:
parent
9cfc82a347
commit
60b2936eff
2 changed files with 23 additions and 3 deletions
|
|
@ -89,7 +89,7 @@ func (c *Context) reset(w http.ResponseWriter, req *http.Request) {
|
||||||
if cap(c.Params) > 0 {
|
if cap(c.Params) > 0 {
|
||||||
c.Params = c.Params[:0]
|
c.Params = c.Params[:0]
|
||||||
} else {
|
} else {
|
||||||
c.Params = make(Params, 0, 5)
|
c.Params = make(Params, 0, c.engine.maxParams)
|
||||||
}
|
}
|
||||||
c.handlers = nil
|
c.handlers = nil
|
||||||
c.index = -1 // 初始为 -1,`Next()` 将其设置为 0
|
c.index = -1 // 初始为 -1,`Next()` 将其设置为 0
|
||||||
|
|
|
||||||
24
engine.go
24
engine.go
|
|
@ -421,6 +421,22 @@ func getHandlerName(h HandlerFunc) string {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TempSkippedNodes池
|
||||||
|
var TempSkippedNodesPool = sync.Pool{
|
||||||
|
New: func() any {
|
||||||
|
return make([]skippedNode, 0, 256)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTempSkippedNodes() *[]skippedNode {
|
||||||
|
return TempSkippedNodesPool.Get().(*[]skippedNode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func PutTempSkippedNodes(skippedNodes *[]skippedNode) {
|
||||||
|
*skippedNodes = (*skippedNodes)[:0] // 重置slice
|
||||||
|
TempSkippedNodesPool.Put(skippedNodes)
|
||||||
|
}
|
||||||
|
|
||||||
// 405中间件
|
// 405中间件
|
||||||
func MethodNotAllowed() HandlerFunc {
|
func MethodNotAllowed() HandlerFunc {
|
||||||
return func(c *Context) {
|
return func(c *Context) {
|
||||||
|
|
@ -433,7 +449,9 @@ func MethodNotAllowed() HandlerFunc {
|
||||||
allowedMethods := []string{}
|
allowedMethods := []string{}
|
||||||
for _, treeIter := range engine.methodTrees {
|
for _, treeIter := range engine.methodTrees {
|
||||||
// 注意这里 treeIter.root 才是正确的,因为 treeIter 是 methodTree 类型
|
// 注意这里 treeIter.root 才是正确的,因为 treeIter 是 methodTree 类型
|
||||||
value := treeIter.root.getValue(requestPath, nil, &c.SkippedNodes, false)
|
tempSkippedNodes := GetTempSkippedNodes()
|
||||||
|
value := treeIter.root.getValue(requestPath, nil, tempSkippedNodes, false)
|
||||||
|
PutTempSkippedNodes(tempSkippedNodes)
|
||||||
if value.handlers != nil {
|
if value.handlers != nil {
|
||||||
allowedMethods = append(allowedMethods, treeIter.method)
|
allowedMethods = append(allowedMethods, treeIter.method)
|
||||||
}
|
}
|
||||||
|
|
@ -451,7 +469,9 @@ func MethodNotAllowed() HandlerFunc {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// 注意这里 treeIter.root 才是正确的,因为 treeIter 是 methodTree 类型
|
// 注意这里 treeIter.root 才是正确的,因为 treeIter 是 methodTree 类型
|
||||||
value := treeIter.root.getValue(requestPath, nil, &c.SkippedNodes, false) // 只查找是否存在,不需要参数
|
tempSkippedNodes := GetTempSkippedNodes()
|
||||||
|
value := treeIter.root.getValue(requestPath, nil, tempSkippedNodes, false) // 只查找是否存在,不需要参数
|
||||||
|
PutTempSkippedNodes(tempSkippedNodes)
|
||||||
if value.handlers != nil {
|
if value.handlers != nil {
|
||||||
// 使用定义的ErrorHandle处理
|
// 使用定义的ErrorHandle处理
|
||||||
engine.errorHandle.handler(c, http.StatusMethodNotAllowed, errors.New("method not allowed"))
|
engine.errorHandle.handler(c, http.StatusMethodNotAllowed, errors.New("method not allowed"))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue