From 3155439f15fd35e289c4a6aa8ed05bb6922b5e93 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 8 Dec 2017 12:03:21 +0800 Subject: [PATCH] =?UTF-8?q?ghttp=20server=E6=98=93=E7=94=A8=E6=80=A7?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/net/ghttp/http.go | 2 -- g/net/ghttp/http_controller.go | 2 +- g/net/ghttp/http_server.go | 35 ++++++++----------- g/net/ghttp/http_server_handle.go | 7 +++- geg/frame/mvc/controller/user/user.go | 7 +--- .../mvc/controller/user/user_register.go | 2 +- 6 files changed, 24 insertions(+), 31 deletions(-) delete mode 100644 g/net/ghttp/http.go diff --git a/g/net/ghttp/http.go b/g/net/ghttp/http.go deleted file mode 100644 index 0d32729f7..000000000 --- a/g/net/ghttp/http.go +++ /dev/null @@ -1,2 +0,0 @@ -package ghttp - diff --git a/g/net/ghttp/http_controller.go b/g/net/ghttp/http_controller.go index 97f33ea96..f57a4af55 100644 --- a/g/net/ghttp/http_controller.go +++ b/g/net/ghttp/http_controller.go @@ -2,7 +2,7 @@ package ghttp // 控制器基类 type Controller struct { - Server *Server + } func (c *Controller) Get(*ClientRequest, *ServerResponse) {} diff --git a/g/net/ghttp/http_server.go b/g/net/ghttp/http_server.go index 87bbb4f37..6fc184da3 100644 --- a/g/net/ghttp/http_server.go +++ b/g/net/ghttp/http_server.go @@ -9,11 +9,13 @@ import ( "log" "sync" "errors" + "gitee.com/johng/gf/g/container/gmap" ) // http server结构体 type Server struct { hmu sync.RWMutex // handlerMap互斥锁 + name string // 服务名称,方便识别 server http.Server // 底层http server对象 config ServerConfig // 配置对象 handlerMap HandlerMap // 回调函数 @@ -26,25 +28,27 @@ type HandlerFunc func(*ClientRequest, *ServerResponse) // uri与回调函数的绑定记录表 type HandlerMap map[string]HandlerFunc -// ServerMap互斥锁 -var smu sync.RWMutex -// Server表,用以存储和检索多个Server对象 -var smap map[string]*Server = make(map[string]*Server) +// Server表,用以存储和检索名称与Server对象之间的关联关系 +var serverMapping *gmap.StringInterfaceMap = gmap.NewStringInterfaceMap() // 创建一个默认配置的HTTP Server(默认监听端口是80) func GetServer(name string) (*Server) { - smu.Lock() - defer smu.Unlock() - if s, ok := smap[name]; ok { - return s + if s := serverMapping.Get(name); s != nil { + return s.(*Server) } - smap[name] = &Server{} - smap[name].SetConfig(defaultServerConfig) - return smap[name] + s := &Server{} + s.name = name + s.SetConfig(defaultServerConfig) + serverMapping.Set(name, s) + return s } // 执行 func (s *Server) Run() error { + if s.status == 1 { + return errors.New("server is already running") + } + // 底层http server配置 if s.config.Handler == nil { s.config.Handler = http.HandlerFunc(s.defaultHttpHandle) @@ -99,15 +103,6 @@ func (s *Server)SetAddr(addr string) error { return nil } -// 设置http server参数 - Handler -func (s *Server)SetHandler(handler http.Handler) error { - if s.status == 1 { - return errors.New("server config cannot be changed while running") - } - s.config.Handler = handler - return nil -} - // 设置http server参数 - TLSConfig func (s *Server)SetTLSConfig(tls *tls.Config) error { if s.status == 1 { diff --git a/g/net/ghttp/http_server_handle.go b/g/net/ghttp/http_server_handle.go index 6fc4c62c3..3c489b01f 100644 --- a/g/net/ghttp/http_server_handle.go +++ b/g/net/ghttp/http_server_handle.go @@ -12,8 +12,13 @@ import ( "gitee.com/johng/gf/g/encoding/ghtml" ) -// 默认HTTP Server处理入口,底层默认使用了gorutine调用该接口 +// 默认HTTP Server处理入口,http包底层默认使用了gorutine异步处理请求,所以这里不再异步执行 func (s *Server)defaultHttpHandle(w http.ResponseWriter, r *http.Request) { + s.handleRequest(w, r) +} + +// 执行处理HTTP请求 +func (s *Server)handleRequest(w http.ResponseWriter, r *http.Request) { request := ClientRequest{} response := ServerResponse {server : s} request.Request = *r diff --git a/geg/frame/mvc/controller/user/user.go b/geg/frame/mvc/controller/user/user.go index cf3a8de42..c3b92d377 100644 --- a/geg/frame/mvc/controller/user/user.go +++ b/geg/frame/mvc/controller/user/user.go @@ -18,12 +18,7 @@ func init() { // 定义操作逻辑 func (cu *Controller_User) Info(r *ghttp.ClientRequest, w *ghttp.ServerResponse) { - uid := r.GetQueryString("uid") - if uid != "" { - w.Write([]byte("uid: " + uid + "\n")) - } - w.Write([]byte("name: John\n")) - w.Write([]byte("...")) + w.Write([]byte("user information page")) } diff --git a/geg/frame/mvc/controller/user/user_register.go b/geg/frame/mvc/controller/user/user_register.go index 52741d3c8..85ac91dee 100644 --- a/geg/frame/mvc/controller/user/user_register.go +++ b/geg/frame/mvc/controller/user/user_register.go @@ -18,7 +18,7 @@ func init() { // 定义操作逻辑 func (cu *Controller_User_Register) Show(r *ghttp.ClientRequest, w *ghttp.ServerResponse) { - w.Write([]byte("register page")) + w.Write([]byte("user register page")) }