多文件自平衡云传输:文件持有及发送端

首先从顶部向下梳理,最顶上将文件持有(ResourceHolder)与用于请求者进行RMI调用的RMI服务器(即发送端)链接起来。
文件持有用于与注册中心进行连接等功能。
发送端用于等待请求者的调用。
调用即请求者发送给持有者 接受服务器地址及请求的资源:

首先有一个将资源持有者和对应资源发送者结合起来的ResourceHolderAndSender。这个类一个用于存储资源和资源持有者信息,这个类初始化时还开启了等待请求者请求资源的RMI服务器。

当用户利用RMI调用发送者的getContent方法:

public void getSendContent(ReceiverServerAddress receiverAddress,
			ResourceFileSectionInfo resourceFileSectionInfo) {
		RealSender realSender;
		try {
			realSender = new RealSender(receiverAddress, 
					resourceFileSectionInfo);
			new Thread(realSender).start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

创立针对该接收服务器及对应所被需求的文件片段的文件发送者。

realSender线程:

public void run() {
			try {
				ResourceHolder resourceHolder = 
						ResourceHolderAndSender.getResourceHolder();
				if (resourceHolder == null) {
						throw new Exception("ResourceHolder未准备!");
				}
				String resourceId = this.resourceFileSectionInfo.getResourceId();
				this.resourceStructor = ResourceHolderAndSender.getResourceStructor(resourceId);

				resourceHolder.resourceSendding();
				String ip = this.receiverAddress.getIp();
				int port = this.receiverAddress.getPort();
				
				SendClient sendClient = new SendClient(
						ip, port, 
						this.resourceStructor,
						this.resourceFileSectionInfo, resourceHolder);
				sendClient.connectToReceiveServer();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

这一段为发送做准备,建立sendClient,用于进行连接接收端的接收服务器,且开始发送。
对其所请求的资源生成FileSender,进行文件读取及发送
借助依据工程结构生成RandomAccessFilePool读取文件
此时涉及到两个新类,sectionReader和sectionSender
前者用于借助RandomAccessFilePool持续读取文件内容。
后者借助前者读取到的资源进行发送。
因为文件大分片按16M,而发送仅为32k,所以还需要监控发送进度。
整体文件发送完需要进行一个标记,这里使用发送一个不可能存在的文件片段,进行特殊标记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值