会议签到系统的架构和实现

会议签到系统的架构和实现
摘要:通过定制安卓会议机开机APP呈现签到界面,并且通过W/B结构采集管理签到信息,实现会议签到的功能。为达到此目标本文将探讨使用Redis提供后台数据支持;使用SocketIo处理适时消息;使用Flask进行原型开发;使用Rust的Axum框架对Web访问进行优化等各个方面。
关键词:会议机、签到、反向代理、KV数据库、Redis、Flask、Axum

目录

一、    组织框架

二、功能实现

1、    安卓启动软件定制

2、    Caddy配置

3、    Flask和Redis交互

4、    简要介绍前端Vue

5、    Rust对核心代码的优化和配置

6、    SocketIO适时响应的作用

三、安装和部署

四、总结


一、    组织框架


我们使用长安视讯的会议机某个系列,使用的是安卓版本7.0定制系统,兼容安卓软件,通过定制开机App,可以实现开机画面显示本站签到人员信息,对其的点击,提交到WEB端及Redis数据库,这就是本系统的基础处理流程。
Caddy作为代理,提供灵活配置和故障冗余,对于Rust替换Flask实现特定功能特别有用,而对于容器后面的Flask服务也用于提供remoteIP的必要属性。
WEB服务器使用Flask,通过逐层添加模块,最终实现签到人员采集,设备状态监控,存储分配名单等等功能。
Redis提供一个数据存储,保存并提供车站人员信息、设备IP绑定等。
最终为了签到提速,使用Rust跨平台二进制程序,分离部分签到接口,建立适时快速的签到通道。

二、功能实现


1、    安卓启动软件定制


将安卓启动软件项目AnyLaucher下载到本地,安装Android Develop Tools工具链,修改界面加入WebView控件,删除无用代码和按钮。在程序启动函数加入上线检测和页面加载代码:

完成以后的界面:

2、    Caddy配置


反向代理flask:

代理socketio:

3、    Flask和Redis交互


引用和初始化:
from flask_redis import FlaskRedis # 使用flask-redis库
app = Flask(__name__)
app.config['SECRET_KEY'] = 'top-secret!'
app.config['REDIS_URL']="redis://:pass@ip:6379/9"
app.config['WERKZEUG_RUN_MAIN']=True  # 
cl.init_app(app)
操作实例,将IP到车站名的字典存入和取出:
def  redis2ipdic():
    global ipdic
    ipdic.clear()
    for k,v in cl.hgetall(IPDIC_KEY).items():
        ipdic[k.decode() ]=v.decode()
    return ipdic
def ipdic2redis():
    global ipdic
  # 将字典保存到Redis的哈希中
    cl.delete(IPDIC_KEY)
cl.hmset(IPDIC_KEY,ipdic)
最后Flask实现汇总点名信息界面如下:

4、    简要介绍前端Vue


在开发过程中,车站人名列表是个灵活改变的项目,需要一个web端的维护界面,于是用到了Vue3,NativeUI组件。其开发文档比较全面。最后绑定Flask后端的json数据,并且将更新提交到Flask的更新接口。
全部车站的人员模板:

保密+脑补1

单个车站编辑:

保密+脑补2

实现汇总打印的界面:

保密+脑补3

5、    Rust对核心代码的优化和配置


Rust在同一时间可以响应更多的请求,使用了异步请求模式可以更快响应请求。
会议机请求页面在初始开发时,点击人名是整页刷新,在切换Rust过程中,修改为Ajax局部刷新、只变更本站最新人名列表和状态,
这两项修改压缩单次请求处理时间2倍以上。
A.Rust使用Axum实现签到功能后的大小5M上下,可以跨平台部署在多个节点,Caddy只需修改App首页链接的跳转地址,就可完成切换。遇到故障或错误,可随时调整到原来的Flask接口。

B.Caddy的负载均衡配置如下:
   redir /ck/test  /rk/test

    handle  /rk/*   {
    reverse_proxy  {
         header_up Host {host}
         header_up X-Real-IP {remote}
            health_uri  /
            health_interval 60s
            health_timeout 1s
            to  10.80.133.00:6055  192.168.1.00:3001
}
    }
其中 /ck/test是默认安卓启动页, /rk/test是Rust程序接口,所有的/rk请求转向Rust的Axum服务。并且被部署在两个节点10.80.133.00:6055  192.168.1.00:3001,轮流接受请求。使用主动健康检查,60秒检查一次。如果其中一个离线,所有请求使用在线的另一个。

6、    SocketIO适时响应的作用


在开发过程中由于需要即时适时采集车站会议机人名,使用刷新轮询无疑会影响速度和性能。因此引入WebSocket的实现Flask-SocketIO,它能很方便的引入现有的Flask应用。
cl.init_app(app)
message_queue= app.config['REDIS_URL']
socketio = SocketIO(app, async_mode='threading',cors_allowed_origins='*' ,message_queue= app.config['REDIS_URL'])
SokcetIO用途
1.    SocketIO的js客户端支持断线重连,长期在线,即便AnyLauncher处于后台也能从socketio-client判断会议机开关机状态。

2.    车站签到人名点击后,会控端首页和状态页可以收到消息通知,刷新签到信息。
3.    车站会前开机未签到,会收到会前提醒。在页面加载时通过null消息订阅,若有消息到达,则调用Android在WebBrowser接口toast显示提醒签到的消息。

注意事项:SocketIO一个限制是不能再多开工作进程,无法使用gunicorn的多worker, Rust使用socketioxide实现同样功能,并且完成了上线运行,作为优化的一部分。

三、安装和部署


本软件需要安装以下部分:
1、会议端APP,以apk发布,安装于会议机,并设置为开机启动,安装前需要把web默认申请地址内置于apk。
2、Web服务器需要安装Caddy,设为开机启动,对CaddyFile文件进行适当修改。
3、安装python3,较新版本及所需依赖,主要是Flask,推荐安装gunicorn以用于生产环境。安装完成后运行本app。
4、安装和运行Redis服务,然后修改Flask连接参数。
5、视情况运行Axum二进制服务,以提高响应速度,改变Caddy的配置文件,并重启Caddy服务。

四、总结


本文提供了安卓会议机实现签到功能的方案,本方案包含前后端实现,有较为灵活的编码架构以方便增改功能,使用Flask和Vue提供按需定制;也有较高的性能冗余,可以提供成百上千的同时访问,由Rust的二进制web服务支持。文中对技术细节和配置文件做了详细讲解,据此每个安卓会议系统的用户,可以实现符合自己需求的量身定制的签到系统。
本项目在开发过程中重度使用了百度AI问答和Github开源项目,并得到了长安视讯及本部门同事的大力支持,特此感谢。 

参考资料:
1)    Flask文档
2)    Rust程序设计语言-简体中文版
3)    Redis使用说明
4)    Caddy2中文文档
5)    Flask-socketio文档


 

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

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

相关文章

c++ 与 Matlab 程序的数据比对

文章目录 背景环境数据保存数据加载 背景 ***避免数据精度误差&#xff0c;快速对比变量 *** 环境 c下载 https://github.com/BlueBrain/HighFive 以及hdf5库 在vs 中配置库 数据保存 #include <highfive/highfive.hpp> using namespace HighFive;std::string fil…

OSS使用签名URL上传(返回前端上传地址)- NodeJS

使用过程 使用PUT方式的签名URL上传文件的过程如下&#xff1a; 代码示例 文件拥有者生成PUT方法的签名URL const OSS require("ali-oss");// 获取签名URL const client await new OSS({accessKeyId: yourAccessKeyId,accessKeySecret: yourAccessKeySecret,buc…

使用 div 自定义 input 和 textarea

1. 为什么要自定义呢&#xff1f; 原生的 input 和 textarea 在某些特定场景下存在功能或兼容性限制&#xff0c;因此使用 div 元素自定义实现&#xff0c;突破原生输入框在样式、功能、兼容性上的限制。 1、解决火狐浏览器换行问题 某些版本的火狐浏览器中&#xff0c;原生…

Golang的网络编程安全

Golang的网络编程安全 一、Golang网络编程的基本概念 作为一种现代化的编程语言&#xff0c;具有优秀的并发特性和网络编程能力。在Golang中&#xff0c;网络编程是非常常见的需求&#xff0c;可以用于开发各种类型的网络应用&#xff0c;比如Web服务、API服务、消息队列等。Go…

Python新春烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…

vscode 设置

一、如何在vscode中设置放大缩小代码 1.1.文件—首选项——设置 1.2.在搜索框里输入“Font Ligatures”&#xff0c;然后点击"在settings.json中编辑" 1.3.在setting中&#xff08;"editor.fontLigatures":前&#xff09;添加如下代码 "editor.mous…

航电系统路线规划克隆核心技术!

一、航电系统 航电系统&#xff08;Avionics System&#xff09;是民用飞机的“大脑”与“神经”&#xff0c;分为航电核心处理与数据传感两个部分。航电核心处理系统采用综合模块化、开放式系统结构&#xff0c;为飞机提供公共计算、网络通信和接口、飞行管理、显示与告警、机…

OSCP - Proving Grounds - BullyBox

主要知识点 如果发现有域名&#xff0c;则可以加入/etc/hosts后重新执行nmap,nikto等扫描dirsearch的时候可以使用完整一些的字典文件&#xff0c;避免漏掉信息.git dump 具体步骤 执行nmap 扫描&#xff0c;发现 80和22端口开放,访问后发现被重定向到 bullybox.local Star…

【计算机网络】传输层协议TCP与UDP

传输层 传输层位于OSI七层网络模型的第四层&#xff0c;主要负责端到端通信&#xff0c;可靠性保障&#xff08;TCP&#xff09;&#xff0c;流量控制(TCP)&#xff0c;拥塞控制(TCP)&#xff0c;数据分段与分组&#xff0c;多路复用与解复用等&#xff0c;通过TCP与UDP协议实现…

MongoDB 备份与恢复综述

目录 一、基本概述 二、逻辑备份 1、全量备份 2、增量备份 3、恢复 三、物理备份 1、cp/tar/fsync 2、WiredTiger 热备份 3、恢复 四、快照备份 一、基本概述 MongoDB 是一种流行的 NoSQL 数据库&#xff0c;它使用文档存储数据&#xff0c;支持丰富的查询语言和索引…

5. 马科维茨资产组合模型+AI金融智能体(qwen-max)+政策信息优化方案(理论+Python实战)

目录 0. 承前1. AI金融智能体1.1 What is AI金融智能体1.2 Why is AI金融智能体1.3 How to AI金融智能体 2. 数据要素&计算流程2.1 参数集设置2.2 数据获取&预处理2.3 收益率计算2.4 因子构建与预期收益率计算2.5 协方差矩阵计算2.6 投资组合优化2.7 持仓筛选2.8 AI金融…

后端开发基础——JavaWeb(Servlet)

Servlet 关于系统架构 系统架构包括什么形式&#xff1f; C/S架构 B/S架构 C/S架构&#xff1f; Client / Server&#xff08;客户端 / 服务器&#xff09; C/S架构的软件或者说系统有哪些呢&#xff1f; QQ&#xff08;先去腾讯官网下载一个QQ软件&#xff0c;几十MB&…

Hanlp的学习

参考&#xff1a;HanLP 自然语言处理使用总结-CSDN博客 参考&#xff1a;Sprint Boot 工程中HanLP配置相对路径&#xff0c;始终有问题的解决方案_springboot hanlp-CSDN博客 <!--hanlp 依赖--><dependency><groupId>com.hankcs</groupId><artifa…

LLMs(大型语言模型)的多智能体:Auto-GPT

LLMs(大型语言模型)的多智能体:Auto-GPT 是指在一个系统中集成多个具有不同能力、角色和任务的智能体,这些智能体能够相互协作、沟通和交互,以共同完成复杂的任务或解决复杂的问题。每个智能体都可以被视为一个独立的实体,具有自己的策略、目标和知识库,通过相互之间的…

JSON全解析:语法、转换与FastJson应用指南

大家好&#xff0c;我是袁庭新。JSON是一种轻量级、基于文本、开放式的数据交换格式。在数据交换的世界里&#xff0c;JSON 扮演着重要角色。它究竟为何备受青睐&#xff1f;下面就为您详细解读其奥秘与应用。 1.JSON简述 JSON&#xff08;JavaScript Object Notation&#…

Java模拟路由协议-rip(路由器仿真实验)

前言&#xff1a; 好久不见&#xff0c;有段时间没有写文章了&#xff0c;本篇文章&#xff0c;由Blue我带大家来复现rip协议。我们以 b站湖南教师匠所讲rip的视频中的例子为我这篇文章所模拟的路由路径 如图&#xff1a; 模拟路径 视频&#xff1a;http://【深入浅出计算机网络…

吴恩达深度学习——神经网络介绍

文章内容来自BV11H4y1F7uH&#xff0c;仅为个人学习所用。 文章目录 什么是神经网络引入神经网络神经元激活函数ReLU隐藏单元 用神经网络进行监督学习监督学习与无监督学习举例 什么是神经网络 引入 已经有六个房子的数据集&#xff0c;横轴为房子大小&#xff0c;纵轴为房子…

ChatGPT 摘要,以 ESS 作为你的私有数据存储

作者&#xff1a;来自 Elastic Ryan_Earle 本教程介绍如何设置 Elasticsearch 网络爬虫&#xff0c;将网站索引到 Elasticsearch 中&#xff0c;然后利用 ChatGPT 使用我们的私人数据来总结对其提出的问题。 Python 脚本的 Github Repo&#xff1a;https://github.com/Gunner…

数智化转型 | 星环科技Defensor 助力某银行数据分类分级

在数据驱动的金融时代&#xff0c;数据安全和隐私保护的重要性日益凸显。某银行作为数字化转型的先行者&#xff0c;面临着一项艰巨的任务&#xff1a;如何高效、准确地对分布在多个业务系统、业务库与数仓数湖中的约80万个字段进行数据分类和分级。该银行借助星环科技数据安全…

【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO

文章目录 前言&#x1f30d; 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术&#x1f341;3.1关键特性&#x1f341;3.2配置选项&#x1f341;3.3使用示例 ❄️4. 连接池之Druid技术&#x1f341; 4.1主要特性&#x1f341; 4.2 配置选项…