云备份——服务器业务处理模块以及网络通信模块

news2025/1/11 6:00:47

我们这里由于网络通信模块借助httplib库来完成,因此两个模块合并到一起完成,不熟悉httplib库的老铁可以再看看我之前的文章

云备份——第三方库使用介绍(下)_爱吃鱼的修猫的博客-CSDN博客

一,业务处理模块设计

我们这里主要需要实现的功能有两个:1. 搭建网络通信服务器。2.服务器针对客户端的请求进行业务处理

前者我们借助httplib实现,因此我们本模块的核心重点放到业务请求处理方向

我们的业务请求处理主要是需要处理下面三个核心请求

1. 文件上传请求:备份客户端上传的文件,并进行响应

2. 文件列表请求:当客户浏览器申请文件列表或者默认资源路径请求,我们都响应备份文件信息列表,进行页面展示

3. 文件下载请求: 通过展示页面,点击下载,响应客户端要下载的数据

 因此结合我们之前httplib库的使用案例,我们接口设计如下

#ifndef _MY_SER_
#define _MY_SER_

#include "config.hpp"
#include "data_manager.hpp"
#include "hot_manager.hpp"
#include "util.hpp"
#include "httplib.h"

namespace mjw_cloud
{
    class Server
    {
    public:
        Server()
        {}
        bool Run()//服务器启动,并将响应的客户端请求和对应处理函数捆绑
        {}
    private:
        //注意回调函数都需要用static修饰成为静态成员函数,因为httplib库中函数要求的参数只有两个
        //类成员函数如果不用static修饰,那么会多出来一个this指针参数,httplib回调就会出错

        //上传文件
        static void UpLoad(const httplib::Request& req,httplib::Response& res);
        //备份文件信息展示
        static void ListShow(const httplib::Request& req,httplib::Response& res);
        //备份文件下载
        static void Dwonload(const httplib::Request& req,httplib::Response& res);

    private:
        int _server_port;             // 端口号
        std::string _server_ip;       // 服务器ip
        std::string _download_prefix; // 下载路径前缀
        httplib::Server _server;      // httplib库搭建服务器
    };
}

#endif

二,类初始化(构造函数以及Run函数)的实现

网络通信接口设计,客户端和服务端是约定好的,客户端发送什么样的请求,服务端回复对应的响应

 三,业务处理接口实现

3.1 文件上传请求

如上图,是我们服务端上传文件时所用html页面,其对应核心报文如下所示

 观察其报文我们发现,主要内容里面不全是核心内容(也就是上传的文件),因此拿到报文后需要解析请求,然后拿到文件数据(httplib库完成),然后我们在将数据写入到文件存储起来,然后向客户端响应报文(主要是响应上传成功,因此返回状态码200即可)

代码实现如下所示

3.2 文件列表展示

当客户浏览器申请文件列表或者默认资源路径请求,我们都响应备份文件信息列表,进行页面展示

 

客户浏览器申请文件列表请求的报文如上所示

 

我们服务端需要回复的报文如上所示,文本信息中的内容是需要我们根据备份文件信息进行填充,其他主要内容不变

代码实现如下

3.3 备份文件下载

上面时客户端下载文件是发送的报文,下面是服务端响应时需要构建的报文

 

其中Etags以及Accopt_Ranges见到的可能比较少

Etags主要是作为文件唯一标识,当我们第一次发送文件时客户端会收到这个消息,当客户端第二次下载,会将这个标识发送给服务器,服务器会根据这个标识判断,这个资源如果没有被修改,则直接使用原先数据的缓存,无需从新下载。

这里我们选择用"文件名-文件大小-文件最后一次修改时间"来组成这个唯一标识

Accept-Ranges主要是断点续传会用到,后面会再说

代码实现

总结

业务处理模块基本完成,但是备份文件下载还有断点重传的重要功能没有讲解,我们将放到后续进行讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/981726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动安全:保护移动设备的 6 种方法

什么是移动安全? 移动安全是一个广泛的术语,涵盖用于保护移动设备上存储和传输的个人和商业信息的所有措施和技术。 移动安全可分为三个关键领域: 物理安全:保护设备本身免遭盗窃或损坏。 软件安全:通常通过使用…

【算法训练-链表 四】【删除】:删除链表的倒数第N个节点、删除有序链表中的重复元素、删除有序链表中的重复元素II

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【删除有序链表中的重复元素】,使用【链表】这个基本的数据结构来实现,这个高频题的站点是:CodeTop&#xff0c…

全国快递查询接口文档-v2,快递,全球快递,配送,物流管理,物流数据,电子商务

一、接口介绍 支持国内外1500快递物流公司的物流跟踪服务,包括顺丰、圆通、申通、中通、韵达等主流快递公司。同时,支持单号识别快递物流公司、按次与按单计费、物流轨迹返回等功能,以满足企业对快递物流查询多维度的需求。 二、使用案例截…

OJ练习第164题——具有所有最深节点的最小子树

具有所有最深节点的最小子树 力扣链接:865. 具有所有最深节点的最小子树 力扣链接:1123. 最深叶节点的最近公共祖先 题目描述 给定一个根为 root 的二叉树,每个节点的深度是 该节点到根的最短距离 。 返回包含原始树中所有 最深节点 的…

【网络安全】图解 Kerberos:身份认证

图解 Kerberos:身份认证 1.什么是 Kerberos ?2.Kerberos 基本概念2.1 基本概念2.2 KDC 3.Kerberos 原理3.1 客户端与 Authentication Service3.2 客户端与 Ticket Granting Service3.3 客户端与 HTTP Service Kerberos 是一种身份认证协议,被…

【进阶篇】MySQL的MVCC实现机制详解

文章目录 0.前言1.基础介绍1.1. 什么是MVCC?1.1. 什么是当前读和快照读?1.1. 当前读,快照读和MVCC的关系1.1. MVCC能解决什么问题,好处是?1.1.1. 提高并发性能1.1.2. 避免死锁1.1.3. 解决脏读、不可重复读和幻读等问题1.1.4. 实现…

Python实现SSA智能麻雀搜索算法优化XGBoost分类模型(XGBClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法,在2020年提出&a…

CATIA Composer软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 CATIA(Computer-Aided Three-dimensional Interactive Application)是一款由法国达索系统公司开发的三维计算机辅助设计(CAD)软件。它是一种全面的产品开发解决方案,广泛…

linux安装wget命令_linux下载文件到本地命令

1、检查是否有安装wget rpm -qa|grep "wget" 复制 在这里插入图片描述 若存在则移除,以下为移除命令 # 移除wget yum remove wget 复制 2、登录wget官网下载地址,下载最新的wget的rpm安装包到本地 下载地址:http://mirrors.…

Android Jetpack Compose 用计时器demo理解Compose UI 更新的关键-------状态管理(State)

目录 概述1.什么是状态2.什么是单向数据流3.理解Stateless和Stateful4.使用Compose实现一个计数器4.1 实现计数器4.2 增加组件复用性-----状态上提 总结 概述 我们都知道了Compose使用了声明式的开发范式,在这样的范式中,UI的职责更加的单一&#xff0c…

行业追踪,2023-09-06

自动复盘 2023-09-06 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

Informatica使用工作流程及案例1

操作流程 ①定义源 ②定义目标 ③创建映射 ④定义任务 ⑤创建工作流 ⑥工作流调度监控 ⑦查验数据 连接D,并定义源、连接源 D:定义目标 通过源定义目标 D:定义好的目标表的表结构生成到目标数据库EDW层 D:创建映射 W:定义任务 W:执行工作流…

第3章 【MySQL】字符集和比较规则

3.1 字符集和比较规则简介 3.1.1 字符集简介 如何存储字符串?需要建立字符与二进制数据的映射关系。建立这个关系需要: 1.把哪些字符映射成二进制数据? 2.怎么映射? 将一个字符映射成一个二进制数据的过程也叫做 编码 &#…

【CI/CD】Rancher CD过程--20230906

gitlab设定CICD的变量 HARBOR_PASSWORD:密码HARBOR_USER:工号K8S_TOKEN:Bearer rancher key K8S_WORKLOAD_URL:选择【View in API】的URL,并非workload的URL。 准备json.txt 选择workload,进入【View i…

用户案例 | 蜀海供应链基于 Apache DolphinScheduler 的数据表血缘探索与跨大版本升级经验

导读 蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业。2021年初,蜀海信息技术中心大数据技术研发团队开始测试用DolphinScheduler作为数据中台和各业务产品项目的任务调度系统工具。本文主要分享了蜀海供应链在海…

Linux——(第五章)用户管理

目录 一、概述 二、基本操作 1.添加用户 2.指定/修改密码 3.删除用户 4.查询用户信息 5.切换用户 6.查看创建了那些用户 7.查看登录用户信息 8.设置普通用户具有root权限 9.用户组 10.修改组 11.用户和组的相关文件 一、概述 Linux系统是一个多用户多任务的操作系…

Ubuntu下QT操作Mysql数据库

本篇总结一下一下Ubuntu下QT操作Mysql数据库。 目录 1. 启动Mysql数据库服务器 2.查看QT支持的数据库驱动 3.连接数据库 4. 增加表和记录 5. 删除记录 6. 修改记录 7. 查询记录 8.完整代码和运行效果 常见错误总结: (1) 数据库服务没启动报错信息 (2) 有…

Java实现WebSocket客户端和服务端(简单版)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

自动驾驶(apollo)

💓博主csdn个人主页:小小unicorn 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 自动驾驶技术 引言自动驾驶的基本原理自动驾驶的技术挑战自动驾驶的潜在影响结…

[BSidesCF 2019]Futurella 1

外星语? 看到这个,我第一时间就是想复制百度一下看是不是什么新编码 结果… 你会发现你粘贴的时候出现的是英文,里面还带着flag 破案 查看源代码 发现根本就没有什么外星语,可能就是style.css在作祟 完整复制内容 Resistanc…