ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

JT808 Java 服务端jt808-server

JT808 Java 服务端jt808-server JT808 Java 服务端项目功能梳理https://gitee.com/yezhihao/jt808-server一、项目定位这是一个基于Netty Spring Boot 3.5.15的JT808/JT1078 部标协议 Java 服务端框架开源项目 jt808-server核心价值是注解驱动定义协议消息告别手工封包/解包致敬 Hibernate/Spring 设计理念同时兼容JT808 2011/2013/2019 三个协议版本无需手动配置TCP/UDP 双协议支持无需修改代码协议层不依赖 Spring可独立运行甚至支持 Android支持异步批量处理显著提升 MySQL 入库性能提供报文解释器解析过程分析工具编码解码调试利器二、Maven 三模块结构[pom.xml]定义聚合项目Java 17Spring Boot 3.5.15模块定位Spring 依赖可复用性commons公共工具库统一响应、异常处理、工具类轻度通用jtt808-protocol协议层消息模型 编解码器不依赖可独立发布为 Maven 依赖支持 Androidjtt808-serverWeb 服务层Netty 服务器 HTTP 接口 消息处理端点强依赖作为服务运行依赖链jtt808-server→jtt808-protocolcommons核心依赖MyBatis-Plus 3.5.12、Knife4j 4.5.0OpenAPI 文档、Caffeine 缓存、HikariCP、MariaDB/H2、Guava 33.4.8三、核心设计理念注解驱动这是该项目最大的亮点整个协议体系通过四组注解完成定义与分发类比关系如下协议注解类比用途Message(消息ID)HibernateTable标注消息类指定消息 IDField(desc, length, ...)HibernateColumn标注消息字段定义长度、字符集、版本、转换器EndpointSpringMVCController标注消息处理类Mapping(types消息ID, desc)SpringMVCRequestMapping标注处理方法按消息 ID 路由消息定义示例[T0100 终端注册]Message(JT808.终端注册)publicclassT0100extendsJTMessage{Field(desc省域ID)privateshortprovinceId;Field(length30,desc终端型号)privateStringdeviceModel;// ...}消息处理示例[JT808Endpoint]EndpointpublicclassJT808Endpoint{Mapping(types0x0100,desc终端注册)publicT8100register(T0100message,Sessionsession){...}}四、各模块详解1. commons 模块 — 公共基础包关键类职责model[R统一 API 响应封装code/msg/details/data含不可变实例modelAPICodes预定义响应码枚举Success、Unauthorized、NonPermission 等modelAPIException自定义业务异常springBaseConfigJackson 序列化配置时间格式、Long→String 防精度丢失springExceptionController全局异常处理器RestControllerAdvicespringSSEServiceServer-Sent Events 实时推送WebSocket 消息监控页面使用utilCoordTransform / GeomUtils坐标转换GPS→百度/高德、几何计算围栏判断utilJsonUtils / DateUtils / StrUtilsJSON、日期、字符串工具2. jtt808-protocol 模块 — 协议层最核心2.1 消息基类与常量文件职责[JTMessage]消息基类含消息 ID、消息体属性、协议版本号、终端手机号、流水号、分包信息使用Field标注支持 BCD 编码与版本控制[JT808.java]JT808 消息 ID 常量如终端注册0x0100[JT1078.java]JT1078 消息 ID 常量JSATL12.java苏标消息 ID 常量[MessageId]消息 ID→类名/类对象的映射注册器2.2 编解码器codec 包文件职责[JTMessageAdapter]编解码适配器整合 Encoder Decoder作为 Netty Pipeline 的一环[JTMessageEncoder]编码器Java 对象→字节流自动处理 BCC 校验、转义处理0x7d 0x02 / 0x7d 0x01、分包消息体 1023 字节自动分包[JTMessageDecoder]解码器字节流→Java 对象处理帧解析0x7e 分隔、反转义、BCC 校验通过 SchemaManager 按消息 ID 版本号动态加载消息类[MultiPacket]分包消息管理维护ByteBuf[]缓冲区addAndGet()收集分包isComplete()判断收齐getNotArrived()获取缺失包号[MultiPacketDecoder]分包解码器维护分包队列实现超时检测自动发送补传请求(0x8003)[MultiPacketListener]分包超时回调接口2.3 消息模型定义t808 / t1078 / jsatl12项目预定义了70 个协议消息类全部继承JTMessage按协议分类JT808 消息t808/包40 类消息类ID方向功能T00010x0001终端→平台终端通用应答T01000x0100终端→平台终端注册T01020x0102终端→平台终端鉴权T02000x0200终端→平台位置信息上报最常用T0201_05000x0201终端→平台位置信息查询应答T03030x0303终端→平台盲区检测报警T07040x0704终端→平台盲区监测预警T08000x0800终端→平台多媒体事件信息上报T08010x0801终端→平台多媒体数据上传T81030x8103平台→终端设置终端参数T82010x8201平台→终端位置查询T83000x8300平台→终端文本下发T86000x8600平台→终端路线设置T80030x8003平台→终端分包补传请求JT1078 音视频消息t1078/包14 类消息类ID方向功能T10030x1003终端→平台终端音视频参数上报T10050x1005终端→平台乘客流量T12050x1205终端→平台音视频资源列表T12060x1206终端→平台文件上传完成T91010x9101平台→终端音视频点播指令触发 RTP 推流T91020x9102平台→终端音视频停止点播T91050x9105平台→终端实时音视频传输状态通知T92010x9201平台→终端拍照指令T93010x9301平台→终端音频播放指令苏标消息jsatl12/包DataPacket、T1210、T1211、T9208、T9212主动安全 ADAS 数据2.4 远程调用服务文件职责[JT808Service]HTTP 接口定义外部系统通过此接口远程调用向终端下发消息[JT808ServiceConfiguration]自动配置当存在jt808-service.base-url时装配 WebClient HttpServiceProxyFactory[JT808ServiceProperties]配置属性绑定外部业务系统集成方式引入jtt808-protocolMaven 依赖 → 配置jt808-service.base-url→ 注入JT808Service→ 调用jt808Service.send(8304, message)即可非阻塞下发指令。3. jtt808-server 模块 — Web 服务层3.1 启动与配置文件职责[JT808Application]Spring Boot 启动类EnableCachingEnableScheduling[JTConfig]核心配置创建 TCP/UDP Netty 服务器、SchemaManager扫描org.yzh.protocol包建立消息映射、SessionManager、编解码器、HandlerMapping[application.yml]配置 TCP/UDP 端口(17806)、空闲超时(180s)、媒体文件路径、FTP 配置、MyBatis-Plus3.2 消息处理端点endpoint 包这是上行消息的处理入口Netty 收到终端消息后按Mapping路由分发文件职责[JT808Endpoint]JT808 协议端点50 个Mapping方法处理 T0001~T0A00 各类上行消息支持Async异步和AsyncBatch批量合并提升入库性能[JT1078Endpoint]JT1078 协议端点处理 T1003、T1005、T1205、T1206、T9105 等音视频消息协议扩展点新增消息只需添加Mapping方法[JSATL12Endpoint]苏标协议端点[JTHandlerInterceptor]消息处理器拦截器日志、鉴权等[JTMessagePushAdapter]消息推送适配器SSE 推送到 Web 监控页面[JTMultiPacketListener]分包超时实现自动发送补传请求[JTSessionListener]Session 生命周期监听注册/注销、下行拦截器配置[MessageManager]消息管理器提供request()请求-响应模式和notify()通知模式向终端发送消息3.3 HTTP 控制器controller 包文件职责[JT808Controller]8000 系列指令下发接口设置参数、位置查询、终端控制、区域设置、多媒体控制等[JT1078Controller]1078 音视频指令下发接口点播、停止、回放、拍照等[OtherController]其他接口如 WebSocket/SSE 消息监控页面五、整体数据流┌──────────┐ TCP/UDP:17806 ┌─────────────┐ ┌──────────┐ │ JT808 终端 │ ───────────────▶│ Netty Server │ │ 业务系统 │ │ (车机/MDVR)│ ◀───────────────│ (JTConfig) │ ◀── HTTP API ──▶ │(集成方) │ └──────────┘ 下行指令/应答 └──────┬──────┘ (JT808Controller) └──────────┘ │ ▲ ┌──────▼──────┐ │ jt808Service.send() │JTMessageAdapter│ │ (远程HTTP调用) │ (编解码适配器) │ │ └──────┬──────┘ │ ┌─────────────┼─────────────┐ 解码 ▼ 编码 ▼ │ ┌──────────────┐ ┌──────────────┐ │ │JTMessageDecoder│ │JTMessageEncoder│ │ │(反转义/BCC校验) │ │(转义/BCC/分包) │ │ └───────┬──────┘ └───────▲──────┘ │ │ │ │ ┌───────▼──────┐ │ │ │MultiPacket │ │ │ │Decoder │ │ │ │(分包重组/补传) │ │ │ └───────┬──────┘ │ │ │ │ │ ┌───────▼───────────────┴────────┐ │ │ HandlerMapping (按Mapping路由) │ └───────┬────────────┬────────────┘ │ ▼ ▼ │ ┌─────────────────┐ ┌──────────────┐ │ │ JT808Endpoint │ │JT1078Endpoint│ │ │ Mapping(0x0100) │ │Mapping(0x1003)│ │ │ Mapping(0x0200) │ │Mapping(0x1205)│ │ │ AsyncBatch(...) │ │Mapping(0x9105)│ │ │ ...50方法 │ │ ... │ │ └─────────────────┘ └──────────────┘ │ │ 返回应答对象 → Encoder → Netty → 终端 │ └──────────────────────────────────────┘终端接入车机通过 TCP/UDP 连接 17806 端口 → Netty 接收解码JTMessageAdapter→ 帧分割(0x7e) → 反转义 → BCC 校验 →JTMessageDecoder按消息 ID 从 SchemaManager 获取类并反序列化分包重组若是分包消息MultiPacketDecoder缓存等待收齐后合并超时则发补传请求(0x8003)消息路由HandlerMapping按消息 ID 路由到对应Mapping方法业务处理Endpoint 处理消息返回应答对象 → 经 Encoder 编码 → Netty 发回终端下行指令外部系统通过 HTTP APIController或远程调用JT808Service→MessageManager→Session.request()→ 编码发送六、协议支持的完整矩阵协议版本支持状态说明JT/T 8082011/2013/2019三版本自动兼容无需手动配置JT/T 10782016支持音视频指令流媒体服务需自建T/JSATL 12苏标2017支持主动安全 ADAS基于 808-2013T/GDRTA 002粤标2019支持主动安全基于 808-2019七、与 C# 网关jt808gw的对比定位维度Java 版 jt808-serverC# 版 jt808gw定位通用协议框架可独立发布为依赖RTVS 演示网关协议层完整70 消息类注解驱动依赖 JX.dll 封装编解码自研 Protostar 注解驱动JX.dll 内部实现网络框架Nettynetmc 封装自研 TCP Server数据持久化预留扩展点AsyncBatch 入库不保存数据音视频仅协议指令层9101/9102 等完整JT1078→GB28181 流转发GB28181不支持支持SIP 客户端协议转换集成方式Maven 依赖 HTTP 远程调用独立部署简言之Java 版是协议层框架聚焦消息定义、编解码、路由分发C# 版是业务网关聚焦协议转换与流媒体对接两者互补。八、项目扩展方式该项目扩展非常简洁遵循三步模式定义消息在t808/或t1078/包下新建类加MessageField注解处理上行消息在对应 Endpoint 加Mapping(types消息ID)方法下发指令在 Controller 加 HTTP 接口调用messageManager.request()测试方面提供了 [Elucidator])报文↔对象互转分析工具和 [DarkRepulsor]协议单元测试以及jtt808-server/src/test/下的客户端测试和压力测试。
返回列表