From 569adb7dd62b89567f363109ce69554fc227f6ed Mon Sep 17 00:00:00 2001 From: John Date: Mon, 27 Aug 2018 20:53:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dghttp=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E4=B8=8E=E5=9B=9E=E8=B0=83=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=88=A4=E6=96=AD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/net/ghttp/ghttp_server.go | 2 +- g/net/ghttp/ghttp_server_router.go | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/g/net/ghttp/ghttp_server.go b/g/net/ghttp/ghttp_server.go index ce3156d01..4ad03a831 100644 --- a/g/net/ghttp/ghttp_server.go +++ b/g/net/ghttp/ghttp_server.go @@ -70,7 +70,7 @@ type Server struct { hooksTree map[string]interface{} // 所有注册的事件回调函数(路由表,树型结构,哈希表+链表优先级匹配) serveCache *gcache.Cache // 服务注册路由内存缓存 hooksCache *gcache.Cache // 事件回调路由内存缓存 - routesMap map[string]string // 已经注册的路由及对应的注册方法文件地址 + routesMap map[string]string // 已经注册的路由及对应的注册方法文件地址(用以路由重复注册判断) // 自定义状态码回调 hsmu sync.RWMutex // status handler互斥锁 statusHandlerMap map[string]HandlerFunc // 不同状态码下的注册处理方法(例如404状态时的处理方法) diff --git a/g/net/ghttp/ghttp_server_router.go b/g/net/ghttp/ghttp_server_router.go index 4f8beeaf9..5a0f65205 100644 --- a/g/net/ghttp/ghttp_server_router.go +++ b/g/net/ghttp/ghttp_server_router.go @@ -61,15 +61,16 @@ func (s *Server) setHandler(pattern string, handler *handlerItem, hook ... strin if s.Status() == SERVER_STATUS_RUNNING { return errors.New("cannot bind handler while server running") } + regkey := fmt.Sprintf(`%s@%v`, pattern, hook) caller := s.getHandlerRegisterCallerLine(handler) - if line, ok := s.routesMap[pattern]; ok { + if line, ok := s.routesMap[regkey]; ok { s := fmt.Sprintf(`duplicated route registry "%s" in %s , former in %s`, pattern, caller, line) glog.Errorfln(s) return errors.New(s) } else { defer func() { if resultErr == nil { - s.routesMap[pattern] = caller + s.routesMap[regkey] = caller } }() }