package socket import ( "blazing/common/socket/codec" "blazing/common/socket/handler" "github.com/panjf2000/gnet/pkg/pool/goroutine" "github.com/panjf2000/gnet/v2" ) type Server struct { gnet.BuiltinEventEngine eng gnet.Engine addr string network string multicore bool bufferSize int workerPool *goroutine.Pool codec codec.SocketCodec handler handler.Handler } 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: 4096, //默认缓冲区大小 multicore: true, } for _, option := range options { option(server) } //... return server } func WithSocketCodec(codec codec.SocketCodec) Option { return func(u *Server) { u.codec = codec } } func WithSocketHandler(handler 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 string) Option { return func(s *Server) { s.network = "tcp" s.addr = ":" + port } }