
go-jt808
JT/T 808(2011/2013/2019)+ JT/T 1078 音视频 + 主动安全附件(苏标等)的 Go 实现
设计目标:以二次开发和生产使用为首要目标,通过事件机制灵活扩展,不侵入核心协议
Go 1.23+
📑 目录
快速开始
cd example/quick_start
go run .
更多示例:
核心特性
- 无锁会话管理 + 主动消息下发(带超时回复等待)
- 内置终端模拟器,便于协议联调。提供适配器、分布式集群等示例
- 高度可扩展:通过
WithCustomHandleFunc 自定义回复,实现几乎任意业务逻辑

核心协议实现测试100%覆盖率,纯 Go 实现,简洁优雅(核心逻辑极简)。
基本用法
启动 JT808 服务并自定义消息处理
goJt808 := service.New(
service.WithHostPorts("0.0.0.0:808"),
service.WithTerminalTimeout(30*time.Second, func(t service.TerminalTimeout) { /* 超时处理 */ }),
service.WithCustomHandleFunc(func() map[consts.JT808CommandType]service.Handler {
return map[consts.JT808CommandType]service.Handler{
consts.T0200LocationReport: &myLocation{}, // 自定义经纬度处理
}
}),
)
go goJt808.Run()
自定义处理器示例(推荐模式:嵌入官方 model 并实现事件):
type myLocation struct{ model.T0x0200 }
func (l *myLocation) OnReadExecutionEvent(msg *service.Message) {
_ = l.Parse(msg.JTMessage)
// l.Longitude, l.Latitude, l.Speed, l.AlarmSignDetails ...
log.Printf("收到位置 key=%s", msg.Key)
}
func (l *myLocation) OnWriteExecutionEvent(_ service.Message) {}
平台主动下发消息(带应答)
msg := service.NewActiveMessage(phone, consts.P8201QueryLocation, nil, 3*time.Second)
reply := goJt808.SendActiveMessage(msg)
if reply.ExtensionFields.Err != nil { /* 超时或终端不在线 */ }
详见:
常见案例
按场景分类的常用示例(每个都有完整可运行代码):
web例子在线网页: http://124.221.30.46:18000/
真实案例: 根据壹品信息技术有限公司对接中农云设备修改
2. jt1078视频 详情
平台下发0x9101等指令 -> 模拟器开始推流等动作
⚠️ 注意:部分在线测试页面已失效,需自行部署
原: 设备连接到原808服务
现: 设备连接到适配器, 适配器产生两个模拟链接, 一个连接到原808服务, 保证不影响原服务.
另一个连接到gb28181模拟服务, 产生一个gb28181客户端. (目前仅支持注册、目录查询、点播[jt1078转ps流])
docker pull cdcddcdc/jt808-to-gb28181:latest
docker run -d \
-v /home/config.yaml:/app/jt808_to_gb28181/config.yaml \
--network host \
cdcddcdc/jt808-to-gb28181:latest
4. 兼容任意808服务 详情
真实设备连接到适配器, 适配器产生多个模拟设备连接多个808服务.
5. 主动安全附件 流程
默认支持苏标, 可自定义各事件扩展.(开始、传输进度、补传情况、完成、退出等事件)
6. 存储经纬度 详情
jt808服务端、模拟器、消息队列、数据库都运行在2核4G腾讯云服务器.
测试每秒保存5000条的情况、约5.5小时保存了近1亿的经纬度.
7. 分布式集群方案 详情
使用nginx把终端分配到多个808服务上, 下发数据使用广播. 存在则回复终端应答到新主题, 不存在则忽略.
主动下发给设备指令 -> 获取应答的情况
9. 协议交互详情 代码参考
使用自定义模拟器, 可以轻松生成测试用的报文, 有详情描述.
可在apifox文档页面, 使用测试环境查看报文详情. https://vsh9jdgg5d.apifox.cn/250573462e0
自定义附加信息处理, 获取想要的扩展内容. 自定义平台下发和回复的映射和解析关系.
11. ftp例子 详情
把atop_cpu.png传输到ftp目录 (需要ftp服务)
12. 并发测试例子 详情
默认创建1000个客户端, 循环30秒心跳、5秒位置信息测试.
参考资料
2024 年 10 月前主流的 Go 实现较少或质量一般,以下为推荐参考(非 Go)。
| 项目名称 |
语言 |
日期 |
Star 数 |
链接 |
| JT808 |
C# |
2024-10-01 |
534 |
JT808 C# |
| jt808-server |
Java |
2024-10-01 |
1.4k+ |
JT808 Java |
性能测试
- java模拟器 (QQ群 373203450)
- go模拟器 详情
- go模拟器 详情点击
连接数测试
详情点击
| 服务端版本 |
场景 |
并发数 |
服务器配置 |
服务器使用资源情况 |
描述 |
| v0.3.0 |
连接数测试 |
10w+ |
2核4G |
120%+cpu 1.7G内存 |
10.0.16.5: 服务端和模拟器 10.0.16.14: 模拟器 |
模拟经纬度存储测试
详情点击
- save进程丢失了部分数据, channel队列溢出抛弃. (测试channel队列为100)
- 保存1亿丢失826条, 保存4.32亿丢失1216条.(分两次测试)
| 服务端版本 |
客户端 |
服务器配置 |
描述 |
| v0.3.0 |
1w go模拟器 |
2核4G |
每秒5000 一共保存经纬度1亿 实际保存99999174 成功率99.999% |
| 服务 |
cpu |
内存 |
描述 |
| server |
35% |
180.4MB |
808服务端 |
| client |
23% |
196MB |
模拟客户端 |
| save |
18% |
68.8MB |
存储数据服务 |
| nats-server |
20% |
14.8MB |
消息队列 |
| taosadapter |
37% |
124.3MB |
tdengine数据库适配 |
| taosd |
15% |
124.7MB |
tdengine数据库 |
协议支持情况
JT808终端通讯协议
JT1078扩展
主动安全扩展
评论