基于openresty实现的文件推送功能,实现对客户端的监控和更新。基于openresty共享内存,http服务接受上传文件,由tcp服务推送文件至tcp客户端。

基于openresty实现的文件推送功能,实现对客户端的监控和更新。基于openresty共享内存,http服务接受上传文件,由tcp服务推送文件至tcp客户端。

仓库代码: https://gitee.com/liudegui/cloud_edge_push

如果想用python写edge端代码(客户端),可以参考我的另一篇:cpp编写的tcp服务端,提供cpp和Python两个语言版本的tcp客户端,C++部分基于boost.asio网络库

  • 云端(服务端): nginx+lua
  • 边缘端(客户端):C++11/boost

在这里插入图片描述

  • 交互过程
    在这里插入图片描述

已实现功能

  • 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)结构描述
Header4SyncBytes识别码,表示不同设备之间的交互
Header4FullMessageLength数据总长度,包括SyncBytes和FullMessageLength
Header4MeaageType消息类型(消息号),如登录消息或发送消息消息
Header4StringBody消息字符流长度
BodyStringBodyLengthStringBody消息体长度,可能为0
BodyFullMessageLength - 16 - StringBodyLengthBinaryData二进制数据,长度可能为0

注: 消息头总共16个字节(包括SyncBytes和FullMessageLength),消息体长度StringBodyLength是已知的,而二进制数据长度计算得到(FullMessageLength - 16 - StringBodyLength)。

其它说明

大文件上传

1、openresty的nginx-upload-module模块实现大文件上传断点续传
https://github.com/hongzhidao/nginx-upload-module
2、nginx文件服务器的配置
可参考https://blog.csdn.net/weixin_37264997/article/details/106274690
最简单的文章: https://zhuanlan.zhihu.com/p/363794678

使用cpr使用http客户端

相关参考资料:
https://docs.libcpr.org/advanced-usage.html
https://github.com/libcpr/cpr
秘钥文件生成
https://www.zhyd.me/article/62

alias和root

一般情况下,在nginx配置中的良好习惯是:
1)在location / 中配置root目录
2)在location /somepath/ 中配置alias虚拟目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘色的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值