TCP流式传输的时候有必要在底层增加一个打包的协议,大家是怎么处理流式传输的?
几乎所有的TCP传输数据都会面临一个连接数据的问题,因为recv函数可能最少接收一个自己,最多8K个字节,发送端调用Send和接收端的recv数据没有任何的打包概念。比如我用send发了n个同样长度的数据,但是接受端,你不得不自己接收下来然后拆分。
关键是大多数情况下拆分规则是很复杂的,依赖与前面或者后面的数据,所以一般就是先用buffer缓存起来,然后分析,不够就继续接收,够了,还要涉及怎么清理缓存的问题。
这是个相当重复的工作,几乎所有的TCP都会遇到,只不过拆分规则是不同的。
如果TCP协议增加一个打包的概念,send一个包,recv端只有把整个包接收下来,才会返回,会极大的简化程序的设计。
其实自己用C++来封装这么个东西并不难,问题是大家都不这么用的话,要和别人借口的时候,还的自己去连接缓存,分析数据,拆成包。