feat(socket): 优化TCP连接处理性能 - 添加最小可读长度检查,避免无效Peek操作 - 修复数据部分解析逻辑,避免空切片分配 perf(utils): 优化并发哈希映射性能 - 将分段数量调整为CPU核心数 - 重写Range方法,移除channel和goroutine开销 - 添加原子标志控制遍历终止 perf(utils): 优化结构体序列化缓存机制 - 添加sync.Map缓存预处理结果 - 支持结构体、自定义类型、二进制类型分别缓存 - 减少重复反射
This commit is contained in:
@@ -192,7 +192,10 @@ func (s *Server) handleTCP(conn gnet.Conn) (action gnet.Action) {
|
||||
conn.Context().(*player.ClientData).IsCrossDomain.Do(func() { //跨域检测
|
||||
handle(conn)
|
||||
})
|
||||
|
||||
// 1. 检查最小可读长度(避免无效 Peek)
|
||||
if conn.InboundBuffered() < 17 {
|
||||
return gnet.None
|
||||
}
|
||||
// handle(c)
|
||||
// 先读取4字节的包长度
|
||||
lenBuf, err := conn.Peek(4)
|
||||
@@ -275,10 +278,11 @@ func (s *Server) onevent(c gnet.Conn, v []byte) {
|
||||
// 解析Result(13-16字节)
|
||||
//header.Result = binary.BigEndian.Uint32(v[13:17])
|
||||
// 解析数据部分(17字节之后)
|
||||
header.Data = make([]byte, 0)
|
||||
// 数据部分:直接引用切片,避免 make
|
||||
if len(v) > 17 {
|
||||
header.Data = v[17:]
|
||||
|
||||
} else {
|
||||
header.Data = nil // 避免空切片分配
|
||||
}
|
||||
|
||||
s.workerPool.Submit(func() {
|
||||
|
||||
Reference in New Issue
Block a user