# cloud_edge_push **Repository Path**: liudegui/cloud_edge_push ## Basic Information - **Project Name**: cloud_edge_push - **Description**: 基于openresty实现的文件推送功能,实现对客户端的监控和更新。基于openresty共享内存,http服务接受上传文件,由tcp服务推送文件至tcp客户端。可用于tcp客户端的升级。 - **Primary Language**: C++ - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-06-10 - **Last Updated**: 2024-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 已实现功能 + web客户端上传文件 + 支持从web客户端上传文件; + 支持从web客户端查询已上传文件信息; + 支持从web客户端推送指定已上传文件; + 支持断点续传; + 支持网页查看文件列表; + tcp客户端 + 支持不同类型tcp客户端同时启动,不限定个数; + 将已下载的文件信息保存至file_infos.json,防止重复下载; + 定时上报已下载文件信息数据至服务器; + 支持断点续传; + 支持http和https下载; + 支持与服务器断链重连; + 支持配置文件读取,(tcp客户端类型,服务器地址等) ### 环境安装(ubuntu) + 服务端 + 参考https://github.com/stallion5632/apisix-nginx-module 编译openresty,openresty使用官方的1.19.9.1版本(https://openresty.org/download/openresty-1.19.9.1.tar.gz); + 需安装nginx-upload-module[https://github.com/hongzhidao/nginx-upload-module] 模块实现文件断点续传,因而,configure脚本为:`./configure --add-module=../apisix-nginx-module/src/meta --add-module=../nginx-upload-module-master` + 客户端 + 依赖boost库1.66版本以上,cpr(cpr依赖curl); + 使用gcc5.4以上版本; + 程序运行方法 ### 运行 + 服务端 + 运行服务方法 ./start.sh + http服务日志 logs/http.log,tcp服务日志logs/stream.log + 查询数据库数据 + 查询某一个实例: localhost:9988/sys/v1/service_api?filename=libunqlite.so&type=client1 + 全部查询实例,去除参数: localhost:9988/sys/v1/service_api + 客户端 直接运行./edge_client ### http服务和tcp服务任务下发 + 使用内置的共享内存,http下发消息至tcp服务,然后推送至tcp客户端 ### tcp通讯协议: | 消息 | 长度(BYTES) | 结构 | 描述 | | ---------- | ----------------------------------------- | ----------------- | -------------------------------------------- | | **Header** | 4 | SyncBytes | 识别码,表示不同设备之间的交互 | | **Header** | 4 | FullMessageLength | 数据总长度,包括SyncBytes和FullMessageLength | | **Header** | 4 | MeaageType | 消息类型(消息号),如登录消息或发送消息消息 | | **Header** | 4 | StringBody | 消息字符流长度 | | **Body** | StringBodyLength | StringBody | 消息体长度,可能为0 | | **Body** | FullMessageLength - 16 - StringBodyLength | BinaryData | 二进制数据,长度可能为0 | 注: 消息头总共**16**个字节(包括SyncBytes和FullMessageLength),消息体长度StringBodyLength是已知的,而二进制数据长度计算得到(FullMessageLength - 16 - StringBodyLength)。