没有合适的资源?快使用搜索试试~ 我知道了~
可行性报告1
需积分: 0 0 下载量 188 浏览量
2022-08-03
11:25:55
上传
评论
收藏 1.51MB PDF 举报
温馨提示
试读
23页
项目简介该项目通过高效、安全的 Rust 语言对17级项目“基于互联网网页的小型分布式文件系统”进行改写,并用极具计算效率和兼容性的 WebAssembly 来
资源详情
资源评论
资源推荐
可行性报告
可行性报告
项目简介
Rust-Java
1 实现方案与可行性分析
1.1 客户端
1.1.1 客户端功能
1.1.2 代码结构
1.1.3 Rust 实现
1.2 服务器
1.2.1 服务器功能
1.2.2 Java 源码实现方法
1.2.3 源码结构
1.2.4 Rust 实现
2 理论依据与技术依据
2.1 Rust 改写
2.2 Rust 调用 Java
Rust-WebAssembly-JS
1 实现方案与可行性分析
1.1 项目Demo分析
1.2 项目Demo构建
2 理论依据与技术依据
2.1 工具链
2.2 JS与Node.js使用分析
2.2.1 JavaScript
2.2.2 Node.js
创新点
1 Rust改写层面的创新
2 rust-wasm-js使用的创新
3 兼容性
日程规划
代码规范与文档规范
1. 代码规范
1.1 空格和缩进
1.2 命名
1.3 注释
2. 文档规范
2.1 标题
2.2 文本
2.3 参考链接
参考文献
项目简介
该项目通过高效、安全的 Rust 语言对17级项目“基于互联网网页的小型分布式文件系统”进行改写,并
用极具计算效率和兼容性的 WebAssembly 来与 JavaScript 交互实现更高效的网页前端逻辑,并用
WebAssembly 把 Rust 写的分布式文件系统程序的包装,再通过 Node.js 部署 Web 服务器, 最终在
Node.js ( V8 引擎)实现跨平台的,可提供移动式文件访问的分布式文件系统,并在性能、兼容性、创新
性上取得突破。
Rust-Java
1 实现方案与可行性分析
1.1 客户端
1.1.1 客户端功能
原 17 级项目 “基于互联网网页的小型分布式文件系统“ 主要实现了如下功能:
客户端启动模块:启动后读取配置文件,根据配置文件的设置启动网络链接模块中的控制链接线程
与文件夹监控线程,最后调用 wait 函数进入等待状态。
客户端文件分块模块:运用 erasure code 算法进行分块
客户端文件夹监控模块:该模块将根据配置文件的设置监控一系列文件夹并在发现新文件时发起数
据连接将其上传到分布式文件系统中配置文件指定的逻辑位置并在本地删除之。
客户端网络链接模块:数据链接类 FragmentManager 、控制连接类 ServerConnecter 、文件传
送类 FileTransporter
1.1.2 代码结构
client
client
Client
Synltem
com
backblaze
erasure //原项目采用 backclaze 公司提供的开源实现,本项目采用 github 上的开
源项目 reed-solomon-erasure 实现
connect
FileTransporter //其中有两个静态函数分别用于文件碎片的发送与接收
FragmentManager //数据链接类,负责处理数据链接中的客户机碎片上传报文、客户
机碎片下载报文与客户机碎片删除报文
ServerConnecter
fileDetector
FileAttrs //查询属性
FileUploader
FileUtil //寻找文件
FolderScanner //每隔一段时间确认一次是否有文件夹中被放入了新文件
1.1.3 Rust 实现
本项目使用 Rust 改写17级“基于互联网网页的小型分布式文件系统”项目,用 Rust 改写原项目的 Java
客户端。与原项目相同,本项目的客户端也采用与 tcp 协议的 socket 通信与服务器建立连接。
客户端利用 Config 读取配置文件,为 Rust 应用程序组织分层或分层配置。Config 可设置一组默认参
数,然后可以通过合并各种来源的配置来扩展它们。
客户端提供以下几个功能:
获取本地目录
原项目的 Java 客户端使用 java.io.File 类获取文件列表,本项目选用 Rust 改写,使用
std::io::fs 模块处理文件系统,列出本地机器参与共享的文件列表。
对文件进行分块
客户端使用 erasure code 算法,对服务器发来的文件进行分块。此算法可依据 github 上的开源
项目 reed-solomon-erasure 实现。
向服务器发送文件碎片、接收服务器传来的碎片
使用到的标准库:
std::net:TcpListener 用于监听连接
std::net::TcpStream 用于传输数据。
过程:在 TcpListener accept 连接或 connect 到一个远程主机后,将在本地和远程套
接字间创建一个 TcpStream ,数据(文件碎片)通过写入或读取它以进行传输。
示例:
响应服务器删除本地文件
接收到服务器删除文件的请求后,依据文件路径,使用 std::fs::remove_file 删除文件,示例
代码如下
1.2 服务器
//std::io::fs 模块包含几个处理文件系统的函数
use std::fs;
use std::fs::{File, OpenOptions};
use std::io;
use std::io::prelude::*;
use std::os::unix;
use std::path::Path;
match fs::read_dir("a") {
//在主函数中读取目录的内容,返回 `io::Result<Vec<Path>>`
Err(why) => println!("! {:?}", why.kind()),
Ok(paths) => for path in paths {
println!("> {:?}", path.unwrap().path());
},
}
use std::io::prelude::*;
use std::net::TcpStream;
fn main() -> std::io::Result<()> {
let mut stream = TcpStream::connect("127.0.0.1:34254")?;
stream.write(&[1])?;
stream.read(&mut [0; 128])?;
Ok(())
} // the stream is closed here
use std::fs;
fn main() {
fs::remove_file("data.txt").expect("could not remove file");
println!("file is removed");
}
1.2.1 服务器功能
基于互联网网页的小型分布式文件系统主要实现了如下功能:
连接类:接收、回复、转发服务请求与控制信息;收发数据(文件碎片)。
数据管理类:维护云共享文件索引;维护各个客户端的状态信息;记录、处理当前等待响应的文件
请求。
1.2.2 Java 源码实现方法
首先要介绍套接字( Socket )的含义:套接字是一种在应用程序与 TCP/IP 协议交互时,用来区
分不同应用程序进程间的网络通信和连接的接口。主要有三个参数:通信的目的 IP 地址、使用的传输
层协议( TCP 或 UDP )和使用的端口号。Socket 可以看成在两个程序进行通讯连接中的一个端点,一个
程序将一段信息写入 Socket 中,该 Socket 将这段信息发送给另外一个 Socket 中,使这段信息能传送
到其他程序中。如下图:
)
Host A 上的程序A将一段信息写入Socket 中,Socket 的内容被 Host A 的网络管理软件访问,并将
这段信息通过 Host A 的网络接口卡发送到 Host B ,Host B 的网络接口卡接收到这段信息后,传送给
Host B 的网络管理软件,网络管理软件将这段信息保存在 Host B 的 Socket 中,然后程序B 才能在
Socket 中阅读这段信息。要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为
ClientSocket ,另一个运行于服务器端,称之为 serverSocket 。
ServerSocket 类在服务器端创建欢迎套接字。
Socket 类在客户端或服务器端创建链接套接字。
用一系列在 MySQL 数据库中的 table 保存云共享文件索引,每台共享了文件的电脑均在数据库中
对应两个 table,其一记录了这台电脑上共享的每个文件的唯一标识符和其逻辑位置;其二记录了
这台电脑上各个文件的碎片的物理位置和其唯一标识符。
用一个在 MySQL 数据库中的 table 保存客户端,其中有:唯一标识符,在线情况,剩余空间及当
前复杂维持与这个客户端的控制链接( TCP 链接)的线程的编号。
再用一个 table 记录当前网页提出的文件请求。当服务器收到来自客户端的心跳连接时,将查询文
件请求表,如果发现有对客户端上文件的请求,则在回复心跳连接时将文件请求发给客户端并令其
(通过服务器)将文件发往请求方,这样就能解决服务器不时时连接客户端的问题。
1.2.3 源码结构
server
controlConnect
ClientThread
ServerThread
database
Deviceltem //各种信息参数查询设置
FileItem //各种信息参数查询设置
Query closeConnection queryFile //通过名字地址或ID或地址查找文件
queryFragment//fragment, device, request, password, id
或者对上述对象 add, delete, alter
RequestItem
dataConnect
ClientThread //send delete receive fragment confirm //确定在线主机,碎片
数量,判断如何发送
FileTransporter //receive send files
ServerThread
DFS_server
剩余22页未读,继续阅读
赵伊辰
- 粉丝: 61
- 资源: 314
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0