1、通讯协议:TCP/IP ,后台为服务端,设备为客户端,设备通过设备登录指令登录后台,后台响应,设备收到后台的成功响应则登陆成功,若未收到后台的成功响应,则重新发送设备登录指令,直至登录成功,登录成功后,设备发送校时指令给后台,后台响应校时参数给设备,其中包括系统当前时间、LED屏幕亮度值、节目翻页间隔、区域滚动速度等,设备同时将LED屏幕亮度值下发至LED控制卡,亮度进行调整,后台发送显示模版至设备,设备解析并下发显示,模版下发完毕后设备给出通用响应至服务端,后台发送动态站距数据至设备端进行显示,后台与设备之间通过心跳维持连接状态,一旦心跳超时,连接就会断开,后台不再下发站距相关信息,此时设备端需重新登陆;
2、网络线程收发数据:使用循环队列实现任务的先进先出,新数据指令到达,解析后加入任务队列,同时组装任务响应,通知网口发送数据,立即发送给后台;其中入队的任务有:后台响应的校时指令、下发的模版指令、下发的站距指令、修改IP信息指令,入队后需要将任务数据做一次深拷贝留作处理时使用,同时释放掉原始数据;
3、后台任务处理:对任务队列按先进先出的规则进行取任务并处理,处理完成后将深拷贝的数据释放掉,其中处理任务主要涉及到LED显示业务逻辑,此部分较耗时,同时需要注意的是对LED控制卡下发指令需加锁,不能同时发送不同指令给LED控制卡;
此项目中涉及的几个主要问题点:
(1)内存空间的开辟与释放
(2)深拷贝:用于业务处理的数据做一次深拷贝(副本)
(3)后台耗时处理线程:使用循环任务队列顺序执行
(4)GBK、GB2312转换为16进制字节数组
(5)栈空间溢出,数组越界问题
写在最后:
小伙伴想要代码的可以留言评论(VX联系)