HTTP、GRPC TLS支持
This commit is contained in:
parent
a0a38793aa
commit
7046e40d51
|
@ -3,6 +3,7 @@ package server
|
|||
import (
|
||||
"github.com/kercylan98/minotaur/utils/log"
|
||||
"go.uber.org/zap"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -20,6 +21,28 @@ const (
|
|||
|
||||
type Option func(srv *Server)
|
||||
|
||||
// WithTLS 通过安全传输层协议TLS创建服务器
|
||||
// - 支持:Http、Websocket
|
||||
func WithTLS(certFile, keyFile string) Option {
|
||||
return func(srv *Server) {
|
||||
switch srv.network {
|
||||
case NetworkHttp, NetworkWebsocket, NetworkTCP, NetworkTCP4, NetworkTCP6:
|
||||
srv.certFile = certFile
|
||||
srv.keyFile = keyFile
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WithGRPCServerOptions 通过GRPC的可选项创建GRPC服务器
|
||||
func WithGRPCServerOptions(options ...grpc.ServerOption) Option {
|
||||
return func(srv *Server) {
|
||||
if srv.network != NetworkGRPC {
|
||||
return
|
||||
}
|
||||
srv.grpcServer = grpc.NewServer(options...)
|
||||
}
|
||||
}
|
||||
|
||||
// WithProd 通过生产模式运行服务器
|
||||
func WithProd() Option {
|
||||
return func(srv *Server) {
|
||||
|
|
|
@ -54,6 +54,7 @@ type Server struct {
|
|||
httpServer *http.Server // HTTP模式下的服务器
|
||||
grpcServer *grpc.Server // GRPC模式下的服务器
|
||||
supportMessageTypes map[int]bool // websocket模式下支持的消息类型
|
||||
certFile, keyFile string // TLS文件
|
||||
|
||||
gServer *gNet // TCP或UDP模式下的服务器
|
||||
messagePool *synchronization.Pool[*message] // 消息池
|
||||
|
@ -175,9 +176,16 @@ func (slf *Server) Run(addr string) error {
|
|||
go func() {
|
||||
slf.OnStartBeforeEvent()
|
||||
slf.httpServer.Addr = slf.addr
|
||||
if len(slf.certFile)+len(slf.keyFile) > 0 {
|
||||
if err := slf.httpServer.ListenAndServeTLS(slf.certFile, slf.keyFile); err != nil {
|
||||
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
|
||||
}
|
||||
} else {
|
||||
if err := slf.httpServer.ListenAndServe(); err != nil {
|
||||
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
|
||||
}
|
||||
}
|
||||
|
||||
}()
|
||||
case NetworkWebsocket:
|
||||
go connectionInitHandle(nil)
|
||||
|
@ -241,9 +249,16 @@ func (slf *Server) Run(addr string) error {
|
|||
})
|
||||
go func() {
|
||||
slf.OnStartBeforeEvent()
|
||||
if len(slf.certFile)+len(slf.keyFile) > 0 {
|
||||
if err := http.ListenAndServeTLS(slf.addr, slf.certFile, slf.keyFile, nil); err != nil {
|
||||
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
|
||||
}
|
||||
} else {
|
||||
if err := http.ListenAndServe(slf.addr, nil); err != nil {
|
||||
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
|
||||
}
|
||||
}
|
||||
|
||||
}()
|
||||
default:
|
||||
return ErrCanNotSupportNetwork
|
||||
|
|
Loading…
Reference in New Issue