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

news2025/1/29 14:07:50

我们这里由于网络通信模块借助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/995793.html

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

相关文章

UMA 2 - Unity Multipurpose Avatar☀️七.UMA API介绍 : 基本API与保存加载配置

文章目录 🟥 UMA Data DNA参数引用位置🟥 UMA API介绍🟥 UMA Data DNA参数引用位置 我们想通过代码去控制如图所示参数,达到捏脸的目的.下面就是可以控制的代码: _dna["headSize"].Set(1); _avatar.BuildCharacter();我们观察发现操控代码类似Material去设置…

【MySQL】一文详解MySQL,从基础概念到调优

作者简介 前言 博主之前写过一个MySQL的系列,从基础概念、SQL到底层原理、优化,专栏地址: https://blog.csdn.net/joker_zjn/category_12305262.html?spm1001.2014.3001.5482 本文会是这个系列的清单,拉通来聊一聊Mysql从基础概…

MT3905替代方案 (NDP23511KC)完全替代MT3905

NDP23511KC效率高, 单片同步降压DC/DC 变频器采用恒频, 平均电流模式控制架构。 能够提供高达5.0A的峰值负载 具有优良的线路和负载调节。的 设备从输入电压工作 范围为4.6V至30V,并提供一个 输出电压从3.3V到25V可调。 NDP23511KC特…

2023数学建模国赛A题定日镜场的优化设计- 全新思路及代码

背景资料关键信息和要点如下: 定日镜:塔式太阳能光热发电站的基本组件,由纵向转轴和水平转轴组成,用于反射太阳光。 定日镜场:由大量的定日镜组成的阵列。 集热器:位于吸收塔顶端,用于收集太…

UG\NX CAM二次开发 设置几何体自动毛坯 UF_CAM_set_auto_blank

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 设置几何体自动毛坯 UF_CAM_set_auto_blank 效果: 代码: void MyClass::do_it(){ //获取加工环境tagtag_t setup_tag=NULL_TAG;UF_SETUP_ask_setup(&setup_tag);//返回当前工序导航器…

python3网络爬虫--2323爬取B站视频弹幕 解so文件(附源码)

文章目录 一.前言二.配置Protobuf 环境&生成编译文件1.配置Protobuf 环境2.生成编译文件 三.解析弹幕四.自动解析弹幕五.总结六.参考 本篇博文记录一下爬取B站弹幕的主要思路以及…

NFS文件共享系统(K8S)

概述 部署NFS文件共享服务&#xff0c;为Kubernetes提供NFS共享做准备 步骤 安装软件 yum -y install nfs-utils 配置NFS(exports) 编辑 /etc/exports 文件。每一行代表一个共享目录&#xff0c;描述目录如何共享 编写规则&#xff1a; # <共享目录> [客户端1 选项…

Spring修炼之路--基础知识

一、核心概念 1.1软件模块化 软件模块化是一种软件开发的设计模式&#xff0c;它将一个大型的软件系统划分成多个独立的模块&#xff0c;每个模块都有自己的功能和接口&#xff0c;并且能够与其他模块独立地工作1. 软件模块化设计可以使软件不至于随着逐渐变大而变得不可控&am…

​ICCV 2023 | 图像分割全新思路:仅用文本描述实现图像分割!

论文链接&#xff1a; https://arxiv.org/pdf/2308.14575.pdf 代码链接&#xff1a; https://github.com/fawnliu/TRIS 基本概念&#xff1a;Referring Image Segmentation&#xff08;RIS&#xff09;是一种图像分割技术&#xff0c;旨在根据自然语言表达来标记图像或视频中表…

教师节 | 拓世AI这样用,教案不再费神,辅助教师教学全流程

随着科技的不断进步&#xff0c;人工智能和大数据技术所带来的新的信息技术革命在每个细分领域生根发芽&#xff0c;教育领域也不例外。这个新时代的教育充满了挑战和机遇&#xff0c;科技的发展正引领着教育走向一个全新的境界。 教育是社会进步的重要引擎&#xff0c;教师是…

Ubuntu23.10将推出全磁盘加密功能,提高系统安全性

Canonical 宣布其即将推出的 Ubuntu 23.10&#xff08;Mantic Minotaur&#xff09;将引入基于 TPM 的全磁盘加密的初步支持。这个特性将利用系统可信平台模块&#xff08;TPM&#xff09;&#xff0c;在系统级别上进行全磁盘加密&#xff0c;从而提高系统的安全性。 但需要注…

【zip密码】7z分卷压缩如何加密?

想要压缩的文件过大&#xff0c;想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置&#xff1f; 想要分卷压缩文件并加密一起操作就可以完成了&#xff0c;设置方法如下&#xff1a; 打开7-zip&#xff0c;选中需要压缩的文件&#xff0c;选择…

大数据技术之Hadoop:提交MapReduce任务到YARN执行(八)

目录 一、前言 二、示例程序 2.1 提交wordcount示例程序 2.2 提交求圆周率示例程序 三、写在最后 一、前言 我们前面提到了MapReduce&#xff0c;也说了现在几乎没有人再写MapReduce代码了&#xff0c;因为它已经过时了。然而不写代码不意味着它没用&#xff0c;当下很火…

两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送

本套模板非常适合生活类&#xff0c;两性类&#xff0c;减肥类等等类型的网站&#xff0c;这类型网站比较好做流量&#xff0c;因为客户群体众多&#xff0c; 可以自行改内容为其他类型网站模板总体非常简洁漂亮&#xff0c;配色合理&#xff0c;视觉舒服&#xff0c;并且配合…

合创汽车V09纵享商务丝滑?预售价32万元起,正式宣布大规模生产

合创汽车正式宣布&#xff0c;旗下新款车型V09已于9月10日开始大规模生产&#xff0c;并预计将于10月13日正式上市。V09作为中大型纯电动MPV的代表之一&#xff0c;备受瞩目。该车型是广汽新能源和蔚来汽车共同成立的广汽蔚来改为广汽集团和珠江投管共同投资的高端品牌——合创…

C语言练习:输入日期输出该日期为当年第几天

用scanf()输入某年某月某日&#xff0c;判断这一天是这一年的第几天。以3月5日为例&#xff0c;应该先把前两个月的加起来&#xff0c;然后再加上5天即本年的第几天&#xff0c;特殊情况&#xff0c;闰年且输入月份≥3时需考虑多加一天。注&#xff1a;判断年份是否为闰年的方法…

Web server failed to start. Port 8080 was already in use.之解决方法

问题&#xff1a; Web server failed to start. Port 8080 was already in use&#xff0c;这句错误描述意思是当前程序的端口号8080被占用了&#xff0c;需要将占用该端口的程序停止掉才行&#xff1b;错误如图所示&#xff1a; 解决方法&#xff1a; 按住winr&#xff0c;输入…

AI在医疗保健领域:突破界限,救治生命

文章目录 AI在医学影像分析中的应用AI在疾病预测和早期诊断中的作用个性化治疗和药物研发医疗数据管理和隐私保护未来展望 &#x1f389;欢迎来到AIGC人工智能专栏~AI在医疗保健领域&#xff1a;突破界限&#xff0c;救治生命 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博…

第17章_瑞萨MCU零基础入门系列教程之CAN FD 模块

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

buuctf crypto 【Dangerous RSA】解题记录

1.打开文件 2.看到e非常小&#xff0c;c和n都很大&#xff0c;应该是低加密指数&#xff0c;上脚本 from gmpy2 import * from Crypto.Util.number import * n0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbec…