feat(socket): 优化服务器事件处理逻辑并修复数据解码问题

- 移除重复的 `gnet.WithTicker(true)` 配置项
- 调整 `OnTick` 的执行间隔从 10 秒延长至 30 秒
- 更新 `NewClientData` 方法以传入连接对象,用于后续消息处理
- 将 `c.Read` 替换为 `c.Discard` 以正确丢弃已读数据
- 改进数据包处理逻辑,增强对不完整包的处理能力
- 修正 `TomeeHeader.Version` 类型由 string 转为 byte,并更新相关读写操作
- 在消息处理中增加错误日志打印
This commit is contained in:
2025-10-28 02:28:15 +08:00
parent d1b2f8844a
commit ec082db71d
6 changed files with 58 additions and 53 deletions

View File

@@ -53,16 +53,18 @@ type ClientData struct {
Mu sync.Mutex
ERROR_CONNUT int
Wsmsg *WsCodec
Lf *lockfree.Lockfree[*RecvData]
Lf *lockfree.Lockfree[[]byte]
CloseChan chan struct{}
}
func NewClientData() *ClientData {
func NewClientData(c gnet.Conn) *ClientData {
// 创建事件处理器
handler := &eventHandler{}
handler := &eventHandler{
Conn: c,
}
// 创建消费端串行处理的Lockfree
lf := lockfree.NewLockfree[*RecvData](
lf := lockfree.NewLockfree[[]byte](
4096,
handler,
lockfree.NewSleepBlockStrategy(time.Millisecond),
@@ -84,22 +86,23 @@ func NewClientData() *ClientData {
type eventHandler struct {
Callback func(conn gnet.Conn, data TomeeHeader)
Conn gnet.Conn
}
func (h *eventHandler) OnEvent(v *RecvData) {
func (h *eventHandler) OnEvent(v []byte) {
header := TomeeHeader{}
tempdata := bytearray.CreateByteArray(v.Data)
tempdata := bytearray.CreateByteArray(v)
header.Len, _ = tempdata.ReadUInt32()
header.Version, _ = tempdata.ReadString(1)
header.Version, _ = tempdata.ReadByte()
header.CMD, _ = tempdata.ReadUInt32()
//header.CMD = cmd.EnumCommandID(_CMD)
header.UserID, _ = tempdata.ReadUInt32()
header.Result, _ = tempdata.ReadUInt32()
header.Data = tempdata.BytesAvailable()
Recv(v.Conn, header)
Recv(h.Conn, header)
//fmt.Println("接收封包", header)
}
@@ -350,7 +353,7 @@ func (p *Player) SendPack(b []byte) error {
}
} else {
_, err := p.MainConn.Write(b)
err := p.MainConn.AsyncWrite(b, nil)
if err != nil {
glog.Debug(context.Background(), err)