平顶山做网站哪家好,网站建站平台排行榜,移动查询代码大全,东营志愿服务网会议签到系统的架构和实现 摘要:通过定制安卓会议机开机APP呈现签到界面#xff0c;并且通过W/B结构采集管理签到信息#xff0c;实现会议签到的功能。为达到此目标本文将探讨使用Redis提供后台数据支持#xff1b;使用SocketIo处理适时消息#xff1b;使用Flask进行原型开…会议签到系统的架构和实现 摘要:通过定制安卓会议机开机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://:passip: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端的维护界面于是用到了Vue3NativeUI组件。其开发文档比较全面。最后绑定Flask后端的json数据并且将更新提交到Flask的更新接口。 全部车站的人员模板
保密脑补1
单个车站编辑
保密脑补2
实现汇总打印的界面
保密脑补3
5、 Rust对核心代码的优化和配置 Rust在同一时间可以响应更多的请求使用了异步请求模式可以更快响应请求。 会议机请求页面在初始开发时点击人名是整页刷新在切换Rust过程中修改为Ajax局部刷新、只变更本站最新人名列表和状态 这两项修改压缩单次请求处理时间2倍以上。 ARust使用Axum实现签到功能后的大小5M上下可以跨平台部署在多个节点Caddy只需修改App首页链接的跳转地址就可完成切换。遇到故障或错误可随时调整到原来的Flask接口。 BCaddy的负载均衡配置如下 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_modethreading,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文档