You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.1 KiB
80 lines
2.1 KiB
package main |
|
|
|
import ( |
|
"context" |
|
"flag" |
|
"go-common/app/service/live/broadcast-proxy/conf" |
|
"go-common/app/service/live/broadcast-proxy/server" |
|
"go-common/app/service/live/broadcast-proxy/service" |
|
"go-common/library/log" |
|
"net/http" |
|
"net/http/pprof" |
|
"runtime" |
|
"time" |
|
) |
|
|
|
func RunPprofServer(addr string) { |
|
pprofServer := http.NewServeMux() |
|
pprofServer.Handle("/debug/pprof/", http.HandlerFunc(pprof.Index)) |
|
pprofServer.Handle("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline)) |
|
pprofServer.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile)) |
|
pprofServer.Handle("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol)) |
|
pprofServer.Handle("/debug/pprof/trace", http.HandlerFunc(pprof.Trace)) |
|
go func() { |
|
if e := http.ListenAndServe(addr, pprofServer); e != nil { |
|
log.Error("pprof server error ListenAndServe addr:%s,error:%+v", addr, e) |
|
} |
|
defer func() { |
|
if e := recover(); e != nil { |
|
log.Error("expected panic from pprof server,error:%+v", e) |
|
} |
|
}() |
|
}() |
|
} |
|
|
|
func main() { |
|
runtime.GOMAXPROCS(runtime.NumCPU()) |
|
|
|
var confTomlFile string |
|
flag.StringVar(&confTomlFile, "conf", "", "config file for broadcast proxy") |
|
flag.Parse() |
|
|
|
conf, err := conf.NewBroadcastProxyConfig(confTomlFile) |
|
if err != nil { |
|
panic(err) |
|
} |
|
|
|
log.Init(conf.Log) |
|
log.Info("Broadcast Proxy Service:%s", time.Now().String()) |
|
log.Info("Broadcast Proxy Config:%+v", conf) |
|
|
|
proxy, err := server.NewBroadcastProxy(conf.Backend.BackendServer, conf.Backend.ProbePath, |
|
conf.Backend.MaxIdleConnsPerHost, conf.Backend.ProbeSample) |
|
if err != nil { |
|
panic(err) |
|
} |
|
defer proxy.Close() |
|
|
|
dispatcher, err := server.NewCometDispatcher(conf.Ipip, conf.Dispatch, conf.Sven) |
|
if err != nil { |
|
panic(err) |
|
} |
|
defer dispatcher.Close() |
|
|
|
httpService, err := server.NewBroadcastService(conf.Http.Address, proxy, dispatcher) |
|
if err != nil { |
|
panic(err) |
|
} |
|
defer httpService.Close() |
|
|
|
grpcService, err := service.NewGrpcService(proxy, dispatcher) |
|
if err != nil { |
|
panic(err) |
|
} |
|
defer grpcService.Shutdown(context.Background()) |
|
|
|
RunPprofServer(conf.Perf) |
|
|
|
quit := make(chan struct{}) |
|
<-quit |
|
}
|
|
|