socket 服务器接收数据的缓存怎么设计

lvshuchenyin 2014-06-12 09:33:17
为了处理tcp的粘包问题,一般都要用缓存存取,然后等待一个完整的数据包,然后处理。
为了减少内存复制,一般是怎么设计的?听说可以使用ringbuf,但是也不见得真正好,因为数据包大小不一定,如果一开时设置得比较大,那也浪费了不少
...全文
286 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
super晓 2014-06-19
  • 打赏
  • 举报
回复
一般一帧数据设计时会有一个最大长度,,,,你发送数据时,可以设计一个通用类,,2个私有成员变量,buf 和len ;发送数据可以除用户数据区外,还添加包头,包尾,包序号,长度,优先级等来控制帧的安全性检测
kusey 2014-06-18
  • 打赏
  • 举报
回复
引用 3 楼 lvshuchenyin 的回复:
那写缓冲呢,不停地写,用ringbuf不行吧,会溢出
写数据速度比较快,一般不用缓冲区,直接发送就行
lvshuchenyin 2014-06-17
  • 打赏
  • 举报
回复
引用 1 楼 kusey 的回复:
ringbuf 可以先设一个默认大小,在后面使用中发现有比较大的数据包,再重新设置
那写缓冲呢,不停地写,用ringbuf不行吧,会溢出
mujiok2003 2014-06-12
  • 打赏
  • 举报
回复
如果要讨论效率,必须和你用法相结合(reactor, proactor等)。 设计成std::streambuf使用比较方便, 参考boost::asio
kusey 2014-06-12
  • 打赏
  • 举报
回复
ringbuf 可以先设一个默认大小,在后面使用中发现有比较大的数据包,再重新设置

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧