Files
ECAP_Server/FAQ.md
T
2026-07-17 13:52:10 +08:00

2.5 KiB

1.项目是什么,解决什么问题? 该项目类似 Radarcape,是一个基于 ADS-B/Mode-S 信号的飞机态势实时数据处理平台。同时支持多种数据源接入,并将解析后的航空态势数据通过多种方式进行转发。 同时支持多种数据源,数据转发。 2.整体架构(前端、后端、数据库、通信? 整体采用前后端分离架构。前端 React + Ant Design + Leaflet 负责地图态势展示。后端基于 C++20 开发,采用 Drogon 提供 Web 服务能力, 结合 Asio coroutine 实现异步 IO,多数据源通过统一适配层接入。 3.遇到的最大技术挑战? 3.1 高并发 IO难点 1:高并发 IO 为了避免一个数据源数据馈送点开一个线程,和减少多个线程的锁争用带来的问题。因此采用 Asio 协程模型, IO 操作通过 coroutine 异步调度, 避免大量连接创建线程;CPU 密集型解析任务通过线程池执行,实现 IO 和计算分离,避免cpu耗时操作阻塞流程。 3.2 Mode-S解析 Mode-S 报文格式复杂,需要根据英文协议文档实现不同类型报文解析,并处理 CRC 校验以及奇偶校验定位。 3.3 实时地图刷新 飞机位置更新频率高,如果每次数据变化都刷新 React 全组件,会导致性能下降,因此优化状态更新粒度。比如轨迹 网页会缓存状态增量获取新的轨迹点 3.4 底层数据经常出问题,需要良好的可观测结构,来排除底层数据的各种问题。我在网页上每一种报文都带有自己的状态,每一个飞机所有状态都能看到, 各个数据源内部自己协程的状态机当前状态,历史状态切换,当前数据的单包大小平均值 数据速度。以及解析位置的CPR状态,每一个轨迹点的解析速度判断流程 都可以观测,tcp服务端连接了几个客户端都可以看到 4.你的职责? 我负责前端和后端

TCP、UDP、串口、文件、DLL 这些输入方式差异很大,你是怎么设计统一接口的? 我的设计思路是将数据接入层和数据解析层解耦。解析模块只关心统一的数据流,不关心数据来自 TCP、UDP、串口还是文件。 我设计了一个抽象的数据源接口,例如定义初始化、启动、停止、读取数据等基础生命周期接口。 不同数据源分别实现这个接口 数据源最终是把二进制流封装成消息对象,传递给消息处理线程池,处理完成后,根据与数据转发的连接关系,传递给数据转发。