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

会议签到系统的架构和实现
摘要:通过定制安卓会议机开机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.rhkb.cn/news/5980.html

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

相关文章

WPF实战案例 | C# WPF实现大学选课系统

WPF实战案例 | C# WPF实现大学选课系统 一、设计来源1.1 主界面1.2 登录界面1.3 新增课程界面1.4 修改密码界面 二、效果和源码2.1 界面设计(XAML)2.2 代码逻辑(C#) 源码下载更多优质源码分享 作者:xcLeigh 文章地址&a…

JAVA:Spring Boot 实现责任链模式处理订单流程的技术指南

1、简述 在复杂的业务系统中,订单流程往往需要一系列的操作,比如验证订单、检查库存、处理支付、更新订单状态等。责任链模式(Chain of Responsibility)可以帮助我们将这些处理步骤分开,并且以链式方式处理每一个操作…

stm32单片机个人学习笔记14(USART串口数据包)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…

postgresql15的启动

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统,且因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。现在国产数据库大力发展阶段,学习和熟悉postgresql的功能是非常有必要的&#x…

行人识别检测数据集,yolo格式,PASICAL VOC XML,COCO JSON,darknet等格式的标注都支持,准确识别率可达99.5%

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C,go等语言开发经验,mysql,mongo,redis等数据库,设计模…

【前端】CSS实战之音乐播放器

目录 播放器背景旋转音乐封面按钮进度条音量调节音乐信息按钮的效果JavaScript部分播放和暂停音乐切换音乐信息进度条 音量调节避免拖拽时的杂音音量调节条静音和解除静音 自动下一首实现一个小效果最终效果 播放器背景 <div class"play_box"></div>设置…

SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别

目录 JAVA 框架 javaEE spring springmvc springboot SSM SSH maven JAVA 一种面向对象、高级编程语言&#xff0c;Python也是高级编程语言&#xff1b;不是框架(框架&#xff1a;一般用于大型复杂需求项目&#xff0c;用于快速开发)具有三大特性&#xff0c;所谓Jav…

rocketmq基本架构

简介 Name server 负责broker注册、心跳&#xff0c;路由等功能&#xff0c;类似Kafka的ZKname server节点之间不互相通信&#xff0c;broker需要和所有name server进行通信。扩容name server需要重启broker&#xff0c;不然broker不会和name server建立连接producer和consum…

【Web】2025-SUCTF个人wp

目录 SU_blog SU_photogallery SU_POP SU_blog 先是注册功能覆盖admin账号 以admin身份登录&#xff0c;拿到读文件的权限 ./article?filearticles/..././..././..././..././..././..././etc/passwd ./article?filearticles/..././..././..././..././..././..././proc/1…

【优选算法】6----查找总价格为目标值的两个商品

这道题相对于前寄到算法题较为容易~ 同样也是使用了双指针的算法哦~ ----------------------------------------begin-------------------------------------- 题目解析&#xff1a; 题目也是很简单地一句话&#xff0c;但是意图还是很明确~ 讲解算法原理&#xff1a; 同样的&…

github登录用的TOTP和恢复码都丢失了怎么办

从22年左右开始github的登录就需要用TOTP的一个6位秘钥做二次认证登录&#xff0c;如果在用的TOTP软件失效了&#xff0c;可以用github开启二次认证时下载的恢复码重置认证&#xff0c;但是如果你和我一样这两个东西都没了就只能用邮箱重置了&#xff0c;过程给大家分享一下 一…

FFmpeg常用命令

文章目录 一、 FFmpeg 音视频的处理流程二、FFmpeg 常用命令2.1、查看本机支持的采集设备2.2、 录制视频2.2.1、原始视频2.2.2、编码的视频 2.3、录制音频&#xff1a;2.3.1、原始音频2.3.2、编码的音频 2.4、录制音视频&#xff1a;2.5、文件格式转换&#xff1a;2.6、提取音频…

30天开发操作系统 第 17 天 -- 命令行窗口

前言 今天一开始&#xff0c;请大家先回忆一下任务A的情形。在harib13e中&#xff0c;任务A下面的LEVEL中有任务因此FIFO为空时我们可以让任务A进入休眠状态。那么&#xff0c;如果我们并未启动任务B0~ B0~ B2, B2的话&#xff0c;任务A又将会如何呢&#xff1f; 首先&#xf…

OpenEuler学习笔记(九):安装 OpenEuler后配置和优化

安装OpenEuler后&#xff0c;可以从系统基础设置、网络配置、性能优化等方面进行配置和优化&#xff0c;以下是具体内容&#xff1a; 系统基础设置 更新系统&#xff1a;以root用户登录系统后&#xff0c;在终端中执行sudo yum update命令&#xff0c;对系统进行更新&#x…

网络安全 | 入侵检测系统(IDS)与入侵防御系统(IPS):如何识别并阻止威胁

网络安全 | 入侵检测系统&#xff08;IDS&#xff09;与入侵防御系统&#xff08;IPS&#xff09;&#xff1a;如何识别并阻止威胁 一、前言二、入侵检测系统&#xff08;IDS&#xff09;2.1 IDS 的工作原理2.2 IDS 的技术类型2.3 IDS 的部署方式 三、入侵防御系统&#xff08;…

数学规划问题2 .有代码(非线性规划模型,最大最小化模型,多目标规划模型)

非线性规划模型 FIrst:转化为标准型 在matlab中求非线性规划的函数 练习题: 典型例题: 最大最小化模型 核心思想&#xff1a; matlab的模型求解 经典例题: 多目标规划模型 基本概念 求解思路: 模型构建步骤 经典例题: 非线性规划模型 非线性规划&#xff08;Nonl…

2025年最新深度学习环境搭建:Win11+ cuDNN + CUDA + Pytorch +深度学习环境配置保姆级教程

本文目录 一、查看驱动版本1.1 查看显卡驱动1.2 显卡驱动和CUDA对应版本1.3 Pytorch和Python对应的版本1.4 Pytorch和CUDA对应的版本 二、安装CUDA三、安装cuDANN四、安装pytorch五、验证是否安装成功 一、查看驱动版本 1.1 查看显卡驱动 输入命令nvidia-smi可以查看对应的驱…

Transformer详解:Attention机制原理

前言 Hello&#xff0c;大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者&#xff0c;本系列文章是作者参加DataWhale2025年1月份学习赛&#xff0c;旨在讲解Transformer模型的理论和实践。&#x1f632; 本文将详细探讨Attention机制的原理…

npm install 报错:Command failed: git checkout 2.2.0-c

[TOC](npm install 报错&#xff1a;Command failed: git checkout 2.2.0-c) npm install 报错&#xff1a;Command failed: git checkout 2.2.0-c export NODE_HOME/usr/local/node-v14.14.0-linux-x64 npm config set registry https://registry.npmmirror.com 使用如上环…

从对等通信到万维网:通信模型变迁与拥塞求解

Leonard Kleinrock&#xff1a;我很清楚用不了多久这些计算机就会有相互通信的需求&#xff0c;但如何协调处理这些分时系统概率性产生的分组(不同于电路交换)&#xff0c;却没有有效的方法&#xff0c;我有处理该问题的方法&#xff0c;因此对于我的博士研究&#xff0c;我决定…