WrtClient 业务与功能介绍
一、立项背景与目标
东北电力大学校园网需要用户手动打开浏览器进行Web认证才能上网,断网后还得重新登录,操作繁琐。WrtClient部署在OpenWrt路由器上,目标是:实现校园网自动认证和断线重连;提供Web管理界面让普通人也能配置路由器;通过Webhook把网络故障和设备变化实时推送给用户;在路由器有限资源下保持高效稳定运行。
二、核心功能模块
初始化向导:首次启动引导完成设备激活、WiFi连接和校园网账号配置。
身份认证:16位授权码验证,Token有效期24小时,30分钟心跳续期。
WiFi管理:通过UCI命令读写无线配置,支持WPA2/WPA3,兼容iw和iwinfo双通道扫描。
设备管理:融合ARP表、DHCP租约和连接跟踪三源数据发现设备,支持流量统计、设备踢出和别名设置。
防火墙信息:展示iptables规则和防火墙配置,支持NAT类型检测。
网络诊断:DNS解析、ICMP Ping、TCP Ping、路由追踪,结果60秒缓存。
校园网认证:集成NEEPU SDK,支持三大运营商多账号优先级排序,每30秒检测网络,断网自动重连。
Webhook推送:6种事件类型,自定义请求模板和头信息,验证码双步验证,异步派发。
自动化规则:支持事件触发和Cron定时,可执行Webhook通知、Shell命令和日志写入。
系统监控:实时展示CPU、内存、流量,历史图表,小组件可配置,SSE每2秒推送。
局域网测速:内网下载和上传速率测试。应用更新:双源检查,SHA256校验,一键升级。
三、业务流程
首次使用:访问路由器跳转初始化向导,验证授权码,选择WiFi连接,配置校园网账号自动认证,完成后登录进入仪表盘。
日常使用:登录后实时查看系统状态,按需操作WiFi、设备、诊断、测速、推送、自动化等功能。
后台运行:数据采集每2秒缓存系统信息,SSE推送给客户端,校园网监控每30秒自动重连,诊断每60秒更新快照,事件变化触发Webhook和自动化规则。
容错保障:procd守护崩溃后5秒重启,hotplug监听接口事件,rc.local兜底启动。
WrtClient 项目实现报告
一、整体架构与设计思路
WrtClient采用前后端分离架构。后端是C++17原生HTTP服务器,使用cpp-httplib处理请求,nlohmann/json解析数据,模块以单例模式管理并保证线程安全。前端是Vue 3单页应用,Vuetify 3做UI,Pinia管理状态,Axios处理请求,TypeScript保证类型安全。
前后端通过RESTful JSON API通信,实时数据通过SSE每2秒推送。前端设计了SSE优先加轮询降级机制,断连时自动切换,对用户透明。后端采用缓存驱动设计:后台线程每2秒采集系统数据写入缓存,API和SSE都读缓存,系统调用次数降为常数级。系统配置通过popen调用OpenWrt命令完成。跨编译使用WSL加OpenWrt SDK,Go工具自动下载SDK并缓存。部署用procd守护、hotplug监听、rc.local三重保障。
二、个人负责模块与成果
作为全栈开发者,我独立完成了全部工作。后端编写了1890行main.cpp实现55个API端点,以及14个功能模块约2000行代码,涵盖配置管理、认证、WiFi、设备、诊断、校园网认证、推送、自动化、更新等。前端开发了11个页面、4个组件、4个Store、50多个类型化API函数和SSE加轮询通信方案。构建方面编写了bat和sh脚本和Go包管理工具。
量化成果:后端约4000行C++,前端约5000行TypeScript,55个接口加1个SSE端点,崩溃后5秒恢复,实时延迟小于2.5秒。
三、遇到的难点与解决方案
嵌入式性能:路由器内存有限,采用后台线程定时采集加缓存,SSE从缓存广播,避免重复系统调用。
WiFi兼容性:不同版本对iw和iwinfo支持不同,实现双通道降级,优先iw失败切iwinfo,结果统一标准格式。
设备发现:单一数据源不完整,同时采集ARP表、DHCP租约和连接跟踪表,以MAC为主键融合。
SSE稳定性:手动管理EventSource生命周期,监听错误自动重连,连续失败降级到轮询模式。
校园网重连:30秒间隔检测网络连通性,断网自动认证,多账号按优先级依次尝试。
跨编译环境:目标架构与开发机不同,开发Go工具从国内镜像自动下载SDK,一键完成编译打包全流程。