aceld / aceld/zinx

一个包2次IO, 优化方案:一次性读取然后对其进行粘包处理

未关闭
#74 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Go
星标
7.8k
派生
1.3k
PR 合并指标
30 天内没有已合并 PR

描述

```golang
// 创建拆包解包的对象
dp := NewDataPack()

//读取客户端的Msg head
headData := make([]byte, dp.GetHeadLen())
if _, err := io.ReadFull(c.Conn, headData); err != nil {
fmt.Println("read msg head error ", err)
break
}
//fmt.Printf("read headData %+v\n", headData)

//拆包,得到msgid 和 datalen 放在msg中
msg, err := dp.Unpack(headData)
if err != nil {
fmt.Println("unpack error ", err)
break
}

//根据 dataLen 读取 data,放在msg.Data中
var data []byte
if msg.GetDataLen() > 0 {
data = make([]byte, msg.GetDataLen())
if _, err := io.ReadFull(c.Conn, data); err != nil {
fmt.Println("read msg data error ", err)
break
}
}
msg.SetData(data)
```

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。