feat: server.New 支持通过 server.WithWebsocketReadDeadline 设置超时时间

This commit is contained in:
kercylan98 2023-07-05 13:52:11 +08:00
parent ee87612f60
commit 2513714ac4
3 changed files with 29 additions and 4 deletions

View File

@ -24,6 +24,18 @@ const (
type Option func(srv *Server)
// WithWebsocketReadDeadline 设置 Websocket 读取超时时间
// - 默认: 30 * time.Second
// - 当 t <= 0 时,表示不设置超时时间
func WithWebsocketReadDeadline(t time.Duration) Option {
return func(srv *Server) {
if srv.network != NetworkWebsocket {
return
}
srv.websocketReadDeadline = t
}
}
// WithDiversion 通过分流的方式创建服务器
// - diversion分流函数返回一个函数通道用于接收分流的消息
// - 需要确保能够通过 conn 和 packet 确定分流通道

View File

@ -9,6 +9,7 @@ import (
"github.com/kercylan98/minotaur/utils/super"
"github.com/kercylan98/minotaur/utils/synchronization"
"github.com/kercylan98/minotaur/utils/timer"
"github.com/kercylan98/minotaur/utils/times"
"github.com/panjf2000/gnet"
"github.com/panjf2000/gnet/pkg/logging"
"github.com/xtaci/kcp-go/v5"
@ -37,14 +38,18 @@ func New(network Network, options ...Option) *Server {
}
server.event.Server = server
if network == NetworkHttp {
switch network {
case NetworkHttp:
server.ginServer = gin.New()
server.httpServer = &http.Server{
Handler: server.ginServer,
}
} else if network == NetworkGRPC {
case NetworkGRPC:
server.grpcServer = grpc.NewServer()
case NetworkWebsocket:
server.websocketReadDeadline = time.Second * 30
}
for _, option := range options {
option(server)
}
@ -81,6 +86,8 @@ type Server struct {
ticker *timer.Ticker // 定时器
multipleRuntimeErrorChan chan error // 多服务器模式下的运行时错误
websocketReadDeadline time.Duration // websocket连接超时时间
}
// Run 使用特定地址运行服务器
@ -268,9 +275,8 @@ func (slf *Server) Run(addr string) error {
slf.OnConnectionClosedEvent(conn, err)
}
}()
for {
if err := ws.SetReadDeadline(time.Now().Add(time.Second * 30)); err != nil {
if err := ws.SetReadDeadline(super.If(slf.websocketReadDeadline <= 0, times.Zero, time.Now().Add(slf.websocketReadDeadline))); err != nil {
panic(err)
}
messageType, packet, readErr := ws.ReadMessage()

7
utils/times/times.go Normal file
View File

@ -0,0 +1,7 @@
package times
import "time"
var (
Zero time.Time // 零值时间
)