From d24b69e584b0ecf270a09dc100afadb8c37cd3c0 Mon Sep 17 00:00:00 2001 From: John Date: Sun, 29 Apr 2018 16:52:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dghttp.Server=E5=A4=9A?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E7=9B=91=E5=90=AC=E7=89=B9=E6=80=A7=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=9A=E7=AB=AF=E5=8F=A3=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/net/ghttp/http_server.go | 30 ++++++++++++------------------ g/net/ghttp/http_server_options.go | 6 ++++++ geg/net/ghttp/ports.go | 14 ++++++++++++++ 3 files changed, 32 insertions(+), 18 deletions(-) create mode 100644 geg/net/ghttp/ports.go diff --git a/g/net/ghttp/http_server.go b/g/net/ghttp/http_server.go index fc2af355d..400fc571b 100644 --- a/g/net/ghttp/http_server.go +++ b/g/net/ghttp/http_server.go @@ -18,7 +18,6 @@ import ( "gitee.com/johng/gf/g/container/gmap" "gitee.com/johng/gf/g/container/gtype" "gitee.com/johng/gf/g/container/gqueue" - "time" ) const ( @@ -60,7 +59,6 @@ type Server struct { accessLogger *glog.Logger // access log日志对象 errorLogger *glog.Logger // error log日志对象 logHandler *gtype.Interface // 自定义的日志处理回调方法 - serverCount *gtype.Int // 底层的Web Server数量 } // 域名、URI与回调函数的绑定记录表 @@ -119,7 +117,6 @@ func GetServer(name...interface{}) (*Server) { accessLogger : glog.New(), errorLogger : glog.New(), logHandler : gtype.NewInterface(), - serverCount : gtype.NewInt(), } s.errorLogger.SetBacktraceSkip(4) s.accessLogger.SetBacktraceSkip(4) @@ -140,7 +137,6 @@ func (s *Server) Run() error { return errors.New("server is already running") } - // 底层http server配置 if s.config.Handler == nil { s.config.Handler = http.HandlerFunc(s.defaultHttpHandle) @@ -150,6 +146,7 @@ func (s *Server) Run() error { s.startCloseQueueLoop() // 开始执行底层Web Server创建,端口监听 + var wg sync.WaitGroup if len(s.config.HTTPSCertPath) > 0 && len(s.config.HTTPSKeyPath) > 0 { // HTTPS if len(s.config.HTTPSAddr) == 0 { @@ -160,38 +157,35 @@ func (s *Server) Run() error { } } array := strings.Split(s.config.HTTPSAddr, ",") - for _, addr := range array { - s.servedCount.Add(1) - go func() { + for _, v := range array { + wg.Add(1) + go func(addr string) { if err := s.newServer(addr).ListenAndServeTLS(s.config.HTTPSCertPath, s.config.HTTPSKeyPath); err != nil { glog.Error(err) - s.servedCount.Add(-1) + wg.Done() } - }() + }(v) } - } // HTTP if s.servedCount.Val() == 0 && len(s.config.Addr) == 0 { s.config.Addr = gDEFAULT_HTTP_ADDR } array := strings.Split(s.config.Addr, ",") - for _, addr := range array { - s.servedCount.Add(1) - go func() { + for _, v := range array { + wg.Add(1) + go func(addr string) { if err := s.newServer(addr).ListenAndServe(); err != nil { glog.Error(err) - s.servedCount.Add(-1) + wg.Done() } - }() + }(v) } s.status = 1 // 阻塞执行,直到所有Web Server退出 - for s.servedCount.Val() > 0 { - time.Sleep(time.Second) - } + wg.Wait() return nil } diff --git a/g/net/ghttp/http_server_options.go b/g/net/ghttp/http_server_options.go index de573da04..65e87f4a8 100644 --- a/g/net/ghttp/http_server_options.go +++ b/g/net/ghttp/http_server_options.go @@ -57,6 +57,9 @@ func (s *Server)SetPort(port...int) error { if len(port) > 0 { s.config.Addr = "" for _, v := range port { + if len(s.config.Addr) > 0 { + s.config.Addr += "," + } s.config.Addr += ":" + strconv.Itoa(v) } } @@ -80,6 +83,9 @@ func (s *Server)SetHTTPSPort(port...int) error { if len(port) > 0 { s.config.HTTPSAddr = "" for _, v := range port { + if len(s.config.HTTPSAddr) > 0 { + s.config.HTTPSAddr += "," + } s.config.HTTPSAddr += ":" + strconv.Itoa(v) } } diff --git a/geg/net/ghttp/ports.go b/geg/net/ghttp/ports.go new file mode 100644 index 000000000..75a5b93c3 --- /dev/null +++ b/geg/net/ghttp/ports.go @@ -0,0 +1,14 @@ +package main + +import ( + "gitee.com/johng/gf/g/net/ghttp" +) + +func main() { + s := ghttp.GetServer() + s.BindHandler("/", func(r *ghttp.Request){ + r.Response.Writeln("go frame!") + }) + s.SetPort(8100, 8200, 8300) + s.Run() +} \ No newline at end of file