修复ghttp.Server多端口监听特性,增加多端口监听示例

This commit is contained in:
John
2018-04-29 16:52:44 +08:00
parent d16be598f6
commit d24b69e584
3 changed files with 32 additions and 18 deletions

View File

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

View File

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

14
geg/net/ghttp/ports.go Normal file
View File

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