mirror of
https://gitee.com/johng/gf
synced 2026-06-30 11:05:11 +08:00
修复ghttp路由缓存问题
This commit is contained in:
@ -299,7 +299,16 @@ func (r *Request) IsExited() bool {
|
||||
return r.exit.Val()
|
||||
}
|
||||
|
||||
// 获取请求的客户端Ip地址
|
||||
// 获取请求的服务端IP/域名
|
||||
func (r *Request) GetHost() string {
|
||||
array, _ := gregx.MatchString(`(.+):(\d+)`, r.Host)
|
||||
if len(array) > 1 {
|
||||
return array[1]
|
||||
}
|
||||
return r.Host
|
||||
}
|
||||
|
||||
// 获取请求的客户端IP地址
|
||||
func (r *Request) GetClientIp() string {
|
||||
array, _ := gregx.MatchString(`(.+):(\d+)`, r.RemoteAddr)
|
||||
if len(array) > 1 {
|
||||
|
||||
@ -96,7 +96,7 @@ func (s *Server) callHookHandler(r *Request, hook string) {
|
||||
defer s.hhcmu.RUnlock()
|
||||
|
||||
var hookItems []*hookCacheItem
|
||||
cacheKey := hook + "^" + r.URL.Path
|
||||
cacheKey := s.handlerHookKey(r.GetHost(), r.Method, r.URL.Path, hook)
|
||||
if v := s.hooksCache.Get(cacheKey); v == nil {
|
||||
hookItems = s.searchHookHandler(r, hook)
|
||||
if hookItems != nil {
|
||||
@ -124,7 +124,7 @@ func (s *Server) searchHookHandler(r *Request, hook string) []*hookCacheItem {
|
||||
s.hhmu.RLock()
|
||||
defer s.hhmu.RUnlock()
|
||||
hookItems := make([]*hookCacheItem, 0)
|
||||
domains := []string{gDEFAULT_DOMAIN, strings.Split(r.Host, ":")[0]}
|
||||
domains := []string{gDEFAULT_DOMAIN, r.GetHost()}
|
||||
array := strings.Split(r.URL.Path[1:], "/")
|
||||
for _, domain := range domains {
|
||||
p, ok := s.hooksTree[domain]
|
||||
|
||||
@ -28,10 +28,11 @@ func (s *Server) getHandler(r *Request) *HandlerItem {
|
||||
defer s.hmcmu.RUnlock()
|
||||
|
||||
var handlerItem *handlerCacheItem
|
||||
if v := s.handlerCache.Get(r.URL.Path); v == nil {
|
||||
cacheKey := s.handlerKey(r.GetHost(), r.Method, r.URL.Path)
|
||||
if v := s.handlerCache.Get(cacheKey); v == nil {
|
||||
handlerItem = s.searchHandler(r)
|
||||
if handlerItem != nil {
|
||||
s.handlerCache.Set(r.URL.Path, handlerItem, 0)
|
||||
s.handlerCache.Set(cacheKey, handlerItem, 0)
|
||||
}
|
||||
} else {
|
||||
handlerItem = v.(*handlerCacheItem)
|
||||
@ -176,7 +177,7 @@ func (s *Server) searchHandler(r *Request) *handlerCacheItem {
|
||||
func (s *Server) searchHandlerStatic(r *Request) *handlerCacheItem {
|
||||
s.hmmu.RLock()
|
||||
defer s.hmmu.RUnlock()
|
||||
domains := []string{gDEFAULT_DOMAIN, strings.Split(r.Host, ":")[0]}
|
||||
domains := []string{gDEFAULT_DOMAIN, r.GetHost()}
|
||||
// 首先进行静态匹配
|
||||
for _, domain := range domains {
|
||||
if f, ok := s.handlerMap[s.handlerKey(domain, r.Method, r.URL.Path)]; ok {
|
||||
@ -190,7 +191,7 @@ func (s *Server) searchHandlerStatic(r *Request) *handlerCacheItem {
|
||||
func (s *Server) searchHandlerDynamic(r *Request) *handlerCacheItem {
|
||||
s.hmmu.RLock()
|
||||
defer s.hmmu.RUnlock()
|
||||
domains := []string{gDEFAULT_DOMAIN, strings.Split(r.Host, ":")[0]}
|
||||
domains := []string{gDEFAULT_DOMAIN, r.GetHost()}
|
||||
array := strings.Split(r.URL.Path[1:], "/")
|
||||
for _, domain := range domains {
|
||||
p, ok := s.handlerTree[domain]
|
||||
|
||||
@ -3,16 +3,17 @@ package main
|
||||
import "gitee.com/johng/gf/g/net/ghttp"
|
||||
|
||||
func Hello1(r *ghttp.Request) {
|
||||
r.Response.Write("Hello World1!")
|
||||
r.Response.Write("127.0.0.1: Hello World1!")
|
||||
}
|
||||
|
||||
func Hello2(r *ghttp.Request) {
|
||||
r.Response.Write("Hello World2!")
|
||||
r.Response.Write("localhost: Hello World2!")
|
||||
}
|
||||
|
||||
func main() {
|
||||
s := ghttp.GetServer()
|
||||
s.Domain("127.0.0.1").BindHandler("/", Hello1)
|
||||
s.Domain("localhost").BindHandler("/", Hello2)
|
||||
s.SetPort(8199)
|
||||
s.Run()
|
||||
}
|
||||
|
||||
@ -2,11 +2,62 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gitee.com/johng/gf/g"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println(g.Map{})
|
||||
var arabicNumber2RomanSymbolMap = map[int]string{
|
||||
1 : "I",
|
||||
5 : "V",
|
||||
10 : "X",
|
||||
50 : "L",
|
||||
100 : "C",
|
||||
500 : "D",
|
||||
1000 : "M",
|
||||
}
|
||||
|
||||
var romanSymbol2ArabicNumberMap = map[int]string{
|
||||
4000 : "MMMCMC",
|
||||
1000 : "M",
|
||||
900 : "CM",
|
||||
500 : "D",
|
||||
400 : "CD",
|
||||
100 : "C",
|
||||
90 : "XC",
|
||||
50 : "L",
|
||||
40 : "XL",
|
||||
10 : "X",
|
||||
9 : "IX",
|
||||
5 : "V",
|
||||
4 : "IV",
|
||||
1 : "I",
|
||||
}
|
||||
|
||||
var array = []int{4000, 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}
|
||||
|
||||
|
||||
// Arabic numbers to Roman symbols
|
||||
func romanSymbols2ArabicNumber(s string) int {
|
||||
|
||||
}
|
||||
|
||||
// Arabic numbers to Roman symbols
|
||||
func arabicNumberToRomanSymbols(i int) string {
|
||||
r := ""
|
||||
for i > 0 {
|
||||
for _, v := range array {
|
||||
if i >= v {
|
||||
r += romans[v]
|
||||
i -= v
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(intToRomans(1944))
|
||||
//for i := 0; i < 10; i++ {
|
||||
// fmt.Println(intToRomans(i))
|
||||
//}
|
||||
|
||||
select {}
|
||||
}
|
||||
Reference in New Issue
Block a user