Linux平台 LED情报板网关开发总结

这个项目很早之前就开发完成了 只不过 这段时间 总会掺杂别的事 有时候还有点小bug

要做些缝缝补补的 工作 

趁最近有时间总结下这个项目 顺便做个记录

下图是大概的网关架构 (电脑上没啥好的工具WPS里面word画的)

主要的功能:

1.平台通过HTTP协议下发数据给网关

2.网关解析平台下发过来的数据 根据不同厂家品牌的LED显示屏协议和LED通信将平台下发          过来的数据适配成LED能够识别的数据格式,最终是LED能够正确的显示文字或图片,          并将结果反馈给平台

3.网关需要定时上报LED的在线状态给平台,以便于平台展示

4.网关支持大并发(之前老版本设计的是一个led一个进程 假如有100个led显示屏 就需要起       100个进程)目前实际的项目中 多的有140多路LED同时接入,(因为网关采用的EPOLL+线          程池设计 ,所以即使同时接入几千路LED 也是轻轻松松)

5.线程池大小 各种配置通过json格式进行配置

6.目前已经接入三思 诺瓦 同鑫 电明 视展 显科 顶基 卡莱特 仰邦 灵性视觉等 10几种主流协     议

 

程序中涉及到的主要技术点以及第三方库

1.协议通过名字匹配,通过反射实现

2.EPOLL解决同时大量socket并发的问题(查询LED是否在线)

3.线程池来解决同时多个任务显示的问题,通过加锁保证同一个LED 只能串行执行

4.第三方工具 http模块使用cpp-httplib  日志模块使用 zlog  json解析库使用jsonxx 图片格式转         换使用ffmpeg

接下来说下程序的主要逻辑

1.程序启动后读取配置文件 根据配置文件做一些设置 比如端口号 上报间隔时间 线程池大小并启动线程池 等等 ,配置好日志信息 

2.Start启动HTTP server线程 (和平台通信)MainTask线程(任务队列)定时器线程(上             报led状态) 之后 想平台发送http get请求将网关的一些配置传给平台,平台根据网关的      信息返回挂在这个网关的 led基础信息 比如 ip 端口 协议 分辨率等等

3.主任务队列是一个阻塞队列 一直等待 直到 有平台下发过来的消息 解析并送入队列之后,读取消息之后判断是否是有效的消息 如果有效 送入线程池进行并行处理 这里的处理 会根据不同的led厂家品牌调用不同的led驱动进行实际和led进行socket通信 之后并将结果 通过http 反馈给平台 成功还是失败 失败的原因等

4.定时器任务 主要是比如每隔60秒 向 led发送一个数据包 如果led有回应视为在线 无响应 则视为离线  并将结果统一报给平台(这里如果LED少的话 可以用多线程来解决 ,但是如果1000个led 多线程并不合理 不可能去创建1000个线程,线程池在这里 也不太合适 加入1000个led 设置一个20个线程池也要轮询 50次 。可以通过协程 或者EPOLL来解决,我这里是通过EPOLL来解决  1000个socket 对于 EPOLL来说 太轻松了  但是刚开始的时候 不是很好解决的 ,因为通常EPOLL都是用来作为服务端 来接受多个客户端的请求,

而我们的情况 正好相反 网关是客户端 led是服务端 ,相当于 一个客户端 要同时连接多个服务端,最开始的方案并不是EPOLL来解决的 这时候后话了)

5.其他貌似没啥了 无非是更新 led的时候需要考虑加锁的的问题 然后是不同的LED品牌 不同的协议  对接的问题   TCP UDP HTTP都有 ,各种涉及的奇葩协议 等等 ......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QMCY_jason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值