设置消息边界的方法有哪几种?

1. 特定字符或字符串

使用一些不会在正常消息内容中出现的特殊字符或字符串作为消息的分隔符。例如:

  • 行分隔符:在类似于HTTP头部的文本协议中,可以使用换行符(如\r\n)作为每一行的结束标记。

  • 特殊字符串:可以选择一串特殊的字符序列,如"<EOF>",作为消息的结束标志。

  •   在`HTTP`协议中,用一个空行(即连续的`\r\n\r\n`)分隔头部和内容。
    

这种方法简单但依赖于数据内容不包含分隔符,因此不适用于二进制数据或任何可能包含这些特殊字符的数据。

2. 固定消息头 + 消息体结果(TCP)

这种结构中⼀般消息头部分是⼀个固定字节长度的结构,并且消息头中会有⼀个特定的字段指定消息体的大小。收消息时,先接收固定字节数的头部,解出这个消息完整长度,按此长度接收消息体。这是目前各种网络应用用的最多的⼀种消息格式;header + body

3. 结构化分隔

在一些协议中,消息可以按照结构化格式进行分割,每个字段都有明确的开始和结束。例如:

  • JSON对象:使用{}括起来的结构作为一个完整的消息单位。
  • XML文档:通过XML的开始标签和结束标签定义消息的边界。

这种方法适用于数据格式固定且可预解析的情况。

4. 结束符分隔,头部存储长度

在序列化后的buffer前面增加⼀个字符流的头部,其中有个字段存储消息总长度,根据特殊字符(比如根据\n或者\0)判断头部的完整性。这样通常比2要麻烦⼀些,HTTPRedis采用的是这种方式。收消息的时候,先判断已收到的数据中是否包含结束符,收到结束符后解析消息头,解出这个消息完整长度,按此长度接收消息体。

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值