![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多文件云传输技术支撑
技术准备
魔幻音
如果世界上真的有奇迹,那只是努力的另一个代名词。
展开
-
多文件自平衡云传输:资源请求、接收端
首先有几个工具类:UnreceivedFileSectionInfo用于存储单个文件中未接收到的部分,其中有Section列表用于存储、更改所收信息。(在之前文件片段传输处理就是这个类的作用)UnreceivedFilePool用于依据UnreceivedFileSectionInfo存储整个工程中缺少的文件。接着整个过程:最顶层是由用户所需的Resource建立对应的ResourceReceiver,该类依据所拥有的Resource先在本地创建接收环境(即对应的工程空目录先建立起来),接收准备做好原创 2021-08-09 15:23:38 · 125 阅读 · 0 评论 -
多文件自平衡云传输:文件持有及发送端
首先从顶部向下梳理,最顶上将文件持有(ResourceHolder)与用于请求者进行RMI调用的RMI服务器(即发送端)链接起来。文件持有用于与注册中心进行连接等功能。发送端用于等待请求者的调用。调用即请求者发送给持有者 接受服务器地址及请求的资源:顶层为sendClient,用于进行连接接收端的RMI服务器,且开始发送。首先依据工程结构生成RandomAccessFilePool再对其所请求的资源生成FileSender,进行文件读取及发送此时涉及到两个新类,sectionReader和se原创 2021-08-09 15:00:04 · 132 阅读 · 0 评论 -
三种连接方式比较及实现(nio,长连接,短连接)
长链接:在csframework中,使用的就是长连接,每当接收到一个客户端,服务器端会开启一个长期线程去持续监听该客户端的soket,程序也就会阻塞在该socket的read方法上,当用户多了,服务器端所开的线程也就多了,因为每个线程还要申请PCB、占用CPU时间,故这种方式资源开销巨大,但也是接受效率最高的方法。解决:分布式服务器短连接:像RMI调用,即在远程方法调用前进行客户端与服务器连接,方法调用完成就断开连接,这种占用资源最少,不需要线程去持续监听,但每次都需要客户端与服务器的断开、连接,时原创 2021-08-03 17:15:22 · 1637 阅读 · 0 评论 -
多文件自平衡云传输(整体思路)
整个文件传输系统搭建与先前完成的资源发现之上,在资源发现中,给资源请求者留出了一个接口,afterGetHolder这个接口处于用户接入资源注册中心后进行的操作,该操作由注册中心将所需持有者列表交给用户后,接下来就该由用户找到自己需要的资源发起请求。流程:获取sender后,首先要进行发送者的筛选,达到负载均衡的目的(按比计算或随机等等优化计算)。获取所需sender后,在请求者端建立接收服务器,并开启该服务器。该接收服务器会等待发送者的连接,先阻塞起来。服务器开始接收后,在请求端依据发送者个数、原创 2021-07-26 18:39:28 · 225 阅读 · 0 评论 -
资源发现(资源持有者、资源请求者、注册中心)
作为文件传输的前置操作,资源发现的作用是存储、管理资源持有者与接受资源请求者。注册中心:注册中心的作用:对于资源持有者来说:注册中心需要记录持有者的地址信息、所含资源信息。并且需要对连接进来的资源持有者进行活跃检测,踢出不活跃的单位。对于资源请求者来说:需要注册中心接收并提供请求者需要的信息。同时也需要活跃检测。那么对于单纯的连接来说,对进入注册中心的用户都需要检测,那么可以使用Nio短连接实现,因为双方并不需要持续性的信息输出、接收,只是在需要的时候发送信息进行资源获取或者检测活跃。这正好符合短原创 2021-07-25 12:32:44 · 174 阅读 · 0 评论 -
多文件自平衡云传输:核心部分:文件结构、目录存储,分发策略
之前将文件的存储做完了,但仍有一个坑就是当时记录的路径都是该文件相对于工程的路径,那么实际应用时为了能确切找到文件所要放的位置,就需要将绝对路径也存储起来,即ResourceStructor:public class ResourceStructor { private String resourceId; private String absolutePath; private List<String> absoluteRootDirectories; private List&l原创 2021-07-23 11:33:28 · 133 阅读 · 0 评论 -
多文件自平衡云传输:核心部分:文件存储
作为多文件传输系统,文件的存储管理功能必然是少不了的,多文件表示要将某个工程下的多个文件整体传输,那么第一步需要一个类去表示该工程(或app等等):即ResourceInfo:public class ResourceInfo { /** * 编号前缀可以是APP名称、资源类型名称等等<br> * 编号前缀也可以模仿URL的层次格式,说明更详细的信息, * 同时避免命名冲突。<br> */ private String resourceHead; /**原创 2021-07-23 10:34:00 · 80 阅读 · 0 评论 -
文件片段传输的处理
首先传输一个文件片段所需的信息:1.该文件的目录(主要为了获取文件)2.该片段相对于文件的偏移量3.该片段的长度传递本身基于上次的二进制文件传输以及做好了二进制的转换可以实现,但需要考虑片段传输时传输出错的情况,即断点续传。为了做到断点续传需要将没有接收到的部分发送给接收端,用于继续获取文件。总共有8个变量:orgOffset:传送前的偏移量orgLength:长度rcvOffset:接收文件片段对应偏移量rcvLength:长度传送后,被切分成左右两段未传输的片段leftOffse原创 2021-05-09 18:08:41 · 173 阅读 · 0 评论 -
数据类型与二进制字节数组转换(位运算使用)(byte数组和int数据类型互换)
// res[0] = (byte) (value & 0xFF);// // 80 3A 0B 2F// // 1000 0000 0011 1010 0000 1011 0010 1111// // & 0000 0000 0000 0000 0000 0000 1111 1111// res[1] = (byte) ((value >> 8) & 0xFF);// res[2] = (byte) ((value &g原创 2021-05-08 23:49:52 · 849 阅读 · 0 评论