2020-07-05:tcp和udp的区别和应用场景。如何实现断点续传?

2020-07-05:tcp和udp的区别和应用场景。如何实现断点续传?,第1张

这个简单说下。

TCP传输控制协议(Transmission Control Protocol),具体的解释你可以百度百科搜一下,核心的是三次握手协议,保证每次发送的信息对方带庆野收到了,而且我也知道对方收到了,为什么是三次,不是两次也不是四次;这个你可以从百度百科中找到,具体怎么进行三次握手的里面也有介绍的,我这里就不copy了。

UDP(User Datagram Protocol)Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议,这个就像丢沙包一样,我只管把数据丢给你,从不关注你接不接的到。

UDP可以使用于实时聊天,对数据准确性和丢包要求比较低,但速度必须快,还有视频直播,只需要保证视频连续就行,偶尔网络问题丢包不差知影响观看TCP的话就很多了。

断点续传如何实现?大概就是你每次发送完数据的时候记录当前发送的字节长,一旦网络出现问题每次重连的时候就从上次记录的位蠢喊置继续发送剩余文件

拓展一:多点续传,就是吧文件切割成多个部分多线程传输,每个线程负责自己传输的这段内容,续传逻辑和单点续传一样。

一次类推还有P2P等,自己有兴趣可以了解了解,当然说起来很简单,实际真正自己搞起来是很麻烦的。

在socket中实现断点续传,需要考虑以下几个方面:

1. 获取上次传输的数据大小:在客户端和服务端建立连接之前,客户端需要先获取服务器上次传弯亏输的数据大小。客户端通过向服务器发送一个特殊请求(如“GET /file_size”),服务器则会响应请求并返回已经传输的数据大小。

2. 设置传输起始位置和结束位置:在获取到上次传输的数据大小后,客户端需要按照该大小来设置传输的起始位置和结束位置,这样可以避免重复传输已经传输过的数据。客户端发送的请求中需要包含传输区间的起始位置和结束位置(如“GET /filename HTTP/1.1\r\nRange: bytes=start-end\r\n”),服务器则会根据请求中的范围返回数据。

3. 传输过程中发生中断时如何处理:如果在传输过程中发生中断(如网络故障、程序异常等),客户端需要记录下已经传输的数据大小,以便在下次恢复传输时从该位置开始传输。当再次连接服务器时,客户端需要向服务器发送一个特殊请求(如“GET /resume”),该请求包含上次传输的数据大小等相关信息,服务器则会响应请求并返回剩余部分的数据。

4. 整个文件传输完成后如何处理:当整个文件传输完毕后,服务器需要通知客户端传输已经完成,并可以关闭连接。为了保证文件传输的完整性,客户端可以向服务器发送一个确认请求(如“GET /confirm”),服务器则会响应确认请求埋码神并返回确认信息。

以上就是在socket中实现断点续传的基本思路,具体实现模笑方式根据不同的编程语言和 *** 作系统有所差异,但是大致的逻辑都是类似的。

首先需要明确,上传这东西不仅仅是只需要前端就能完成的很好的,需要前端后端统一数据格式,从而实现断点续传。(所以,该文适合于全栈工程师,至少是想成为)

还有,为什么需要分片,不分片能实现断点续传吗?分片是为了充分利用网络带宽,加快上传速度;不分片也是能够实现断点续传的。详细参考 HTML5文件上尺漏传组件深度剖析.

分片上传与断点续传之间没有很直接的关系.

实现断点续传镇乎的前提是需要服务器记录某文件的上传进度,那么御困悉根据什么判断是不是同一个文件呢?可以利用文件内容求md5码,如果文件过大,求取md5码也是一个很长的过程,所以对于大文件,只能针对某一段数据进行计算,加上服务器对cookie用户信息的判断,得到相对唯一的key。

在前端页面,需要将文件按照一定大小进行分片,一次请求只发送这一小片数据,所以我们可以同时发起多个请求。但一次同时请求的连接数不宜过多,服务器负载过重。对于文件分片 *** 作,H5具有十分强大的File API,直接利用File对象的slice方法即可得到Blob对象。

至于同时传输数据的连接数控制逻辑,就需要花点脑子思考了。前端把数据顺利得传给服务器了,服务器只需要按照数据中给的开始字节位置,与读取到的文件片段数据,写入文件即可


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12220113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存