muduo 网络库:https://github.com/chenshuo/muduo
本文与先前发的《使用 UDP 进行消息(信令)数据传输的设计》(https://blog.csdn.net/engrossment/article/details/119989756)比较相似,不过针对 TCP 与 UDP 的不同,进行了特别的设计。请留意。
消息的设计
- 定义好需要的消息,可使用枚举类型给每一个消息定义一个值
- 定义一个通用的消息 header,至少包含 msgid、msglen 字段。
- 然后根据需要定义不同的消息,使用同样的 header
- 消息结构体声明 1 字节对齐。
接收
- 等待 MessageCallback。
- 若可读字节数小于 header 的大小,丢弃当前所有可读数据,打印错误信息,返回
- 若可读字节数大于 header 的大小,强制转型出 header,获取 msgid、msglen
- 若可读字节数小于 msglen,丢弃当前所有可读数据,打印错误信息,返回
- 若 msgid 不支持,丢弃 msglen 字节的数据,打印错误信息,返回
- 若 msglen 不等于 msgid 对应的结构体,丢弃 msglen 字节的数据,打印错误信息,返回
- 强制转型出对应的消息结构体进行使用。按需复制保存。
- 使用完成后清理对应字节数的数据。
- 对于 64、32、16 位的数值类型,进行字节序转换。
发送
- 声明需要发送的消息结构体,初始化 header 和消息体。
- 调用 TcpConnection 的 send 发送该结构体 buffer。
掉线
- TCPClient 自动重连。
- 重连成功前禁止所有的 send 操作。
2021-8-31
|