Files
bl/common/socket/ServerOption.go
2026-03-31 08:19:53 +08:00

79 lines
1.5 KiB
Go

package socket
import (
"blazing/common/socket/codec"
"github.com/gogf/gf/v2/util/gconv"
"github.com/panjf2000/gnet/pkg/pool/goroutine"
"github.com/panjf2000/gnet/v2"
)
type Handler interface {
Handle(gnet.Conn, []byte)
}
type Server struct {
gnet.BuiltinEventEngine
eng gnet.Engine
addr string
network string
multicore bool
bufferSize int
workerPool *goroutine.Pool
codec codec.SocketCodec
handler Handler
discorse bool
quit bool
// batchRead int
serverid uint32
port uint32
}
type Option func(*Server)
// NewServer returns a new Server
func NewServer(options ...Option) *Server {
server := &Server{
// handler: handler.NewTomeeHandler(), //请求返回
codec: codec.NewTomeeSocketCodec(), //默认解码器 len+pack
workerPool: goroutine.Default(),
bufferSize: 40960, //默认缓冲区大小
multicore: true,
//batchRead: 8,
//discorse: true,
}
for _, option := range options {
option(server)
}
//...
return server
}
func WithSocketCodec(codec codec.SocketCodec) Option {
return func(u *Server) {
u.codec = codec
}
}
func WithCORS() Option {
return func(u *Server) {
u.discorse = true
}
}
func WithSocketHandler(handler Handler) Option {
return func(u *Server) {
u.handler = handler
}
}
func WithBufferSize(bufferSize int) Option {
return func(u *Server) {
u.bufferSize = bufferSize
}
}
func WithPort(port int) Option {
return func(s *Server) {
s.network = "tcp"
s.addr = ":" + gconv.String(port)
}
}