随着人们越来越多地使用电子设备,进行日常的学习与工作。这导致了人们将大量的重要资料,以电子文件的形式存储在个人计算机里。而个人计算机一旦丢失,这些资料往往难以找回,或者找到的文件并不完整。**本项目使用基于Rsync的同步算法,在个人服务器或中央服务器上备份个人电脑上的文件。以高频率,低带宽的形式进行文件的增量同步,即只同步原文件修改的部分。通过加密算法对传输数据进行加密,确保文件在同步过程中的安全性。做到用户能够方便地对已同步的文件,进行批量恢复,或是恢复单个文件的历史版本等功能。**消除文件仅保存在本地的不安全性。
通过自定义rpc协议减少传输协议携带不必要的数据
采用的解决方案
- Rsync算法
- 本地更新了一个文件
- 向服务器端发送文件同步请求
- 服务器端响应确认收到请求,计算服务器端文件的哈希块列表,一起发送给本地端
- 本地端将哈希块列表用哈希表储存
- 将本地文件与哈希表做对比
- 结果为BLOCK和DATA的结合体,储存在通道中,发送给服务器端
- 服务器端使用通道结果进行文件复现,所发送的数据实际大小为,与所有BLOCK都不相似的数据。
在TCP的字节流中,请求消息分为三部分:
- 由可变长量编码的 uint 类型用来标识请求头的长度;
- 基于自定义协议编码的请求头部信息
- 基于 Protocol Buffer 协议编码的请求体。
响应消息分为三部分:
- 由可变长量编码的 uint 类型用来标识响应头的长度;
- 基于自定义协议编码的响应头部信息
- 基于 Protocol Buffer 协议编码的响应体。
其中ID为RPC调用的序号,以便在并发调用时,客户端根据响应的ID序号来判断RPC的调用结果;
Error message为调用时发生错误的消息,若该内容为空则表示未出现RPC调用错误;
在请求I/O流中,请求体(Request Body)表示RPC的参数内容;而在响应I/O流中,响应体(Response Body)则表示RPC调用的结果,均采用 Protocol Buffer 协议编码。