```
feat(socket): 优化服务器事件处理逻辑并修复数据解码问题 - 移除重复的 `gnet.WithTicker(true)` 配置项 - 调整 `OnTick` 的执行间隔从 10 秒延长至 30 秒 - 更新 `NewClientData` 方法以传入连接对象,用于后续消息处理 - 将 `c.Read` 替换为 `c.Discard` 以正确丢弃已读数据 - 改进数据包处理逻辑,增强对不完整包的处理能力 - 修正 `TomeeHeader.Version` 类型由 string 转为 byte,并更新相关读写操作 - 在消息处理中增加错误日志打印
This commit is contained in:
@@ -19,7 +19,7 @@ import (
|
||||
// TomeeHeader 结构体字段定义
|
||||
type TomeeHeader struct {
|
||||
Len uint32 `json:"len"`
|
||||
Version string `json:"version" struc:"[1]byte"`
|
||||
Version byte `json:"version" struc:"[1]byte"`
|
||||
CMD uint32 `json:"cmdId" struc:"uint32"`
|
||||
UserID uint32 `json:"userId"`
|
||||
//Error uint32 `json:"error" struc:"[0]pad"`
|
||||
@@ -34,7 +34,7 @@ func NewTomeeHeader(cmd uint32, userid uint32) *TomeeHeader {
|
||||
return &TomeeHeader{
|
||||
CMD: cmd,
|
||||
// Len: 0,
|
||||
Version: "7",
|
||||
Version: 49,
|
||||
Result: 0,
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ func (h *TomeeHeader) Pack(data any) []byte { //组包
|
||||
|
||||
by := bytearray.CreateByteArray()
|
||||
by.WriteUInt32(h.Len)
|
||||
by.WriteString(h.Version)
|
||||
by.WriteByte(h.Version)
|
||||
by.WriteUInt32(uint32(h.CMD))
|
||||
by.WriteUInt32(h.UserID)
|
||||
by.WriteUInt32(h.Result)
|
||||
@@ -186,7 +186,7 @@ func Recv(c gnet.Conn, data TomeeHeader) {
|
||||
|
||||
}
|
||||
|
||||
data.Version = "7"
|
||||
data.Version = 49
|
||||
t.SendPack(data.Pack(ret[0].Interface()))
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user