```
feat(socket): 优化TCP连接处理逻辑并引入批量读取机制 - 在 `ServerEvent.go` 中调整了 `OnTraffic` 方法的处理逻辑, 避免不必要的循环,确保跨域请求优先处理。 - 新增 `batchRead` 配置项,用于控制单次处理的最大数据包数量, 默认值设为 10。 - 修复 `OnClose` 方法中可能存在的执行顺序问题,并显式关闭 Lockfree 资源。 - 在 `ClientData` 初始化时,将 Lockfree 的阻塞策略从 Sleep 策略 替换为 ConditionBlock 策略,提升并发处理性能。 - 微调玩家登录完成时的地图ID判断条件,由 1000
This commit is contained in:
@@ -55,6 +55,7 @@ func (s *Server) OnClose(c gnet.Conn, _ error) (action gnet.Action) {
|
||||
//logging.Infof("conn[%v] disconnected", c.RemoteAddr().String())
|
||||
v, _ := c.Context().(*player.ClientData)
|
||||
s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复
|
||||
|
||||
v.Lf.Close() //关闭lockfree
|
||||
|
||||
if v.Player != nil {
|
||||
@@ -164,12 +165,12 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) {
|
||||
}
|
||||
|
||||
func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
|
||||
if s.discorse && !conn.Context().(*player.ClientData).IsCrossDomain {
|
||||
handle(conn)
|
||||
}
|
||||
conn.Context().(*player.ClientData).IsCrossDomain = true
|
||||
for i := 0; i < s.batchRead; i++ {
|
||||
|
||||
for {
|
||||
if s.discorse && !conn.Context().(*player.ClientData).IsCrossDomain {
|
||||
handle(conn)
|
||||
}
|
||||
conn.Context().(*player.ClientData).IsCrossDomain = true
|
||||
data, err := s.codec.Decode(conn)
|
||||
|
||||
if err == codec.ErrIncompletePacket {
|
||||
|
||||
Reference in New Issue
Block a user