默认
发表评论 9
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教使用tcp传输10G大文件的分包疑问
阅读(32374) | 评论(9 收藏 淘帖
求助大家:使用tcp传输大文件,比如有10G这样的文件,那底层系统自动把文件分包每个包编号是一次性全部分好吗,比如一次性把10G的文件分成一万个包,然后每个包的SEQ马上分配好,之后再陆续发送到服务端,是这样的吗?

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:求助 IM开发
上一篇:求教一个问题,用户在直播间送礼物下一篇:IM群消息投递可靠性的技术方案探讨(欢迎讨论)
推荐方案
评论 9
要传输这种大文件,如果有分包的话,那也是你自已定义的分包逻辑,底层哪管你怎么分包啊
引用:JackJiang 发表于 2023-06-08 21:16
要传输这种大文件,如果有分包的话,那也是你自已定义的分包逻辑,底层哪管你怎么分包啊

如果我不做分包,直接往传输层发送,系统是否会自动分(不考虑应用层自己定义数据大小和边界的情况)
引用:轻盈弄水 发表于 2023-06-09 01:03
如果我不做分包,直接往传输层发送,系统是否会自动分(不考虑应用层自己定义数据大小和边界的情况)

tcp对于应用层来说,它就像一条自来水管,它只有起点和终点,没有中间过程,你让它开始它就开始,让它停止它就停止。要分包,就只能自已应用层进行分包,分包的话还要自已处理粘包问题,这都是tcp的经典问题
引用:JackJiang 发表于 2023-06-09 11:21
tcp对于应用层来说,它就像一条自来水管,它只有起点和终点,没有中间过程,你让它开始它就开始,让它停 ...

感谢大佬回复,我指的分包是tcp一个包有1400字节的限制,无论上层多大数据,它每次发送都有大小限制,所以tcp会自动给我们分包,我指的是这个分包哈,对这个有疑虑
引用:轻盈弄水 发表于 2023-06-13 22:38
感谢大佬回复,我指的分包是tcp一个包有1400字节的限制,无论上层多大数据,它每次发送都有大小限制,所 ...

这就不是你要考虑的,这是协议栈底层的算法
看了下评论和题目,我感觉楼主可以把问题拆开看。
角度1:tcp的拆包,这个其实不是tcp特有的,我的个人理解是MTU(最大传输单元决定),在应用层以下就帮咱们实现好了)。这块咱们无法控制,底层帮我们把数据进行拆解发送,接收粘粘

角度2: 业务层分包处理,也就是您提到的10G文件,它的顺序本身是来自业务层,比如说这10G是字符串,您要是倒过来发送,接收端不是使用同样的方法处理,是不是就对不上了呢?

当然,常见情况我们都可能丢10G来发送,内存也难以匹配上的,这里就需要咱们对文件拆分,拆成1W个小文件。这样在接收端拿到的文件还需要自己拼凑好。 tcp只能保证数据有序发送和接收,单纯理论上10个G也可以这样一把梭
引用:JackJiang 发表于 2023-06-13 22:44
这就不是你要考虑的,这是协议栈底层的算法

大佬,我还有个疑惑,如果我们一次性应用层send() 10g大小的文件,那么传输层tcp会自动帮我们拆包,然后一次性给所有包的seq序号都分配好吗?我主要纠结这个序号是一个tcp连接当中会不断递增还是说一个回环之后会有序号重复?
引用:黄小贱 发表于 2023-06-14 16:47
看了下评论和题目,我感觉楼主可以把问题拆开看。
角度1:tcp的拆包,这个其实不是tcp特有的,我的个人理解 ...

嗯,我可能不知道怎么描述清楚我要问的问题
引用:轻盈弄水 发表于 2023-06-22 12:04
嗯,我可能不知道怎么描述清楚我要问的问题

你几乎不可能一次性应用层send() 10g大小的文件,因为这么大的数据量,总有一个环节会搞的内存溢出
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部