Files
bl/common/socket/ServerOption.go
昔念 f06638d6b6 ```
feat(socket): 优化TCP连接处理逻辑并引入批量读取机制

- 在 `ServerEvent.go` 中调整了 `OnTraffic` 方法的处理逻辑,
  避免不必要的循环,确保跨域请求优先处理。
- 新增 `batchRead` 配置项,用于控制单次处理的最大数据包数量,
 默认值设为 10。
- 修复 `OnClose` 方法中可能存在的执行顺序问题,并显式关闭 Lockfree 资源。
- 在 `ClientData` 初始化时,将 Lockfree 的阻塞策略从 Sleep 策略
  替换为 ConditionBlock 策略,提升并发处理性能。
- 微调玩家登录完成时的地图ID判断条件,由 1000
2025-10-29 03:19:32 +08:00

77 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
connected int64
network string
multicore bool
bufferSize int
workerPool *goroutine.Pool
codec codec.SocketCodec
handler Handler
discorse bool
quit bool
batchRead int
}
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,
batchRead: 10,
//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)
}
}