From a2d8afda9f62f2127482047b5423f654f5a3285f Mon Sep 17 00:00:00 2001 From: boyce Date: Mon, 4 Mar 2019 15:13:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Ewss=E4=B8=8Ehttps=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cluster/cluster.go | 2 +- network/httpserver.go | 22 +++++++++++++++++++--- network/websocketserver.go | 20 ++++++++++++++++++-- sysservice/httpserverervice.go | 19 +++++++++++++++++++ sysservice/wsserverservice.go | 5 +++++ 5 files changed, 62 insertions(+), 6 deletions(-) diff --git a/cluster/cluster.go b/cluster/cluster.go index 4ab3526..7da13ad 100644 --- a/cluster/cluster.go +++ b/cluster/cluster.go @@ -86,7 +86,7 @@ func (slf *CCluster) ListenService() error { tcplisten, err2 := net.ListenTCP("tcp", tcpaddr) if err2 != nil { - service.GetLogger().Printf(sysmodule.LEVER_FATAL, "ListenTCP error:%v", err) + service.GetLogger().Printf(sysmodule.LEVER_FATAL, "ListenTCP error:%v", err2) os.Exit(1) return err2 } diff --git a/network/httpserver.go b/network/httpserver.go index be209b3..4d66746 100644 --- a/network/httpserver.go +++ b/network/httpserver.go @@ -15,6 +15,10 @@ type HttpServer struct { writetimeout time.Duration httpserver *http.Server + certfile string + keyfile string + + ishttps bool } func (slf *HttpServer) Init(port uint16, handler http.Handler, readtimeout time.Duration, writetimeout time.Duration) { @@ -34,7 +38,6 @@ func (slf *HttpServer) Start() { func (slf *HttpServer) startListen() error { listenPort := fmt.Sprintf(":%d", slf.port) - slf.httpserver = &http.Server{ Addr: listenPort, Handler: slf.handler, @@ -43,11 +46,24 @@ func (slf *HttpServer) startListen() error { MaxHeaderBytes: 1 << 20, } - err := slf.httpserver.ListenAndServe() + var err error + if slf.ishttps == true { + err = slf.httpserver.ListenAndServeTLS(slf.certfile, slf.keyfile) + } else { + err = slf.httpserver.ListenAndServe() + } + if err != nil { - fmt.Printf("http.ListenAndServe(%d, nil) error\n", slf.port) + fmt.Printf("http.ListenAndServe(%d, %v) error\n", slf.port, err) os.Exit(1) } return nil } + +func (slf *HttpServer) SetHttps(certfile string, keyfile string) bool { + slf.certfile = certfile + slf.keyfile = keyfile + slf.ishttps = true + return true +} diff --git a/network/websocketserver.go b/network/websocketserver.go index da9e0ae..b28d30b 100644 --- a/network/websocketserver.go +++ b/network/websocketserver.go @@ -58,13 +58,16 @@ type WebsocketServer struct { httpserver *http.Server reciver map[string]Reciver + + certfile string + keyfile string + iswss bool } func (slf *WebsocketServer) Init(port uint16) { slf.port = port slf.mapClient = make(map[uint64]*WSClient) - } func (slf *WebsocketServer) CreateClient(conn *websocket.Conn) *WSClient { @@ -105,7 +108,13 @@ func (slf *WebsocketServer) startListen() { MaxHeaderBytes: 1 << 20, } - err := slf.httpserver.ListenAndServe() + var err error + if slf.iswss == true { + err = slf.httpserver.ListenAndServeTLS(slf.certfile, slf.keyfile) + } else { + err = slf.httpserver.ListenAndServe() + } + if err != nil { fmt.Printf("http.ListenAndServe(%d, nil) error\n", slf.port) os.Exit(1) @@ -189,3 +198,10 @@ func (slf *WebsocketServer) initRouterHandler() http.Handler { cors := cors.AllowAll() return cors.Handler(r) } + +func (slf *WebsocketServer) SetWSS(certfile string, keyfile string) bool { + slf.certfile = certfile + slf.keyfile = keyfile + slf.iswss = true + return true +} diff --git a/sysservice/httpserverervice.go b/sysservice/httpserverervice.go index a922b4a..3a98d4a 100644 --- a/sysservice/httpserverervice.go +++ b/sysservice/httpserverervice.go @@ -33,10 +33,17 @@ type HttpServerService struct { port uint16 controllerMaps ControllerMapsType + certfile string + keyfile string + ishttps bool } func (slf *HttpServerService) OnInit() error { slf.httpserver.Init(slf.port, slf.initRouterHandler(), 10*time.Second, 10*time.Second) + if slf.ishttps == true { + slf.httpserver.SetHttps(slf.certfile, slf.keyfile) + } + return nil } @@ -121,3 +128,15 @@ func (slf *HttpServerService) GetMethod(strCallPath string) (*reflect.Value, err return &value, nil } + +func (slf *HttpServerService) SetHttps(certfile string, keyfile string) bool { + if certfile == "" || keyfile == "" { + return false + } + + slf.ishttps = true + slf.certfile = certfile + slf.keyfile = keyfile + + return true +} diff --git a/sysservice/wsserverservice.go b/sysservice/wsserverservice.go index acff58b..2aaa71e 100644 --- a/sysservice/wsserverservice.go +++ b/sysservice/wsserverservice.go @@ -40,3 +40,8 @@ func (ws *WSServerService) OnDestory() error { func (ws *WSServerService) SetupReciver(pattern string, messageReciver network.IMessageReceiver, bEnableCompression bool) { ws.wsserver.SetupReciver(pattern, messageReciver, bEnableCompression) } + +func (slf *WSServerService) SetWSS(certfile string, keyfile string) bool { + slf.wsserver.SetWSS(certfile, keyfile) + return true +}