修复ghttp路由缓存问题

This commit is contained in:
John
2018-04-25 17:11:34 +08:00
parent f53eb145db
commit 31e71dbd72
5 changed files with 75 additions and 13 deletions

View File

@ -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 {

View File

@ -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]

View File

@ -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]

View File

@ -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()
}

View File

@ -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 {}
}