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