diff --git a/README.md b/README.md
index 5498857..1cfdd8c 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
# go-jt808
- 本项目已更好支持二次开发为目标 可通过各种自定义事件去完成相应功能 常见案例如下
-1. 存储经纬度 [详情点击](./example/simulator/server/main.go)
+1. 存储经纬度 [代码参考](./example/simulator/server/main.go)
``` txt
jt808服务端 模拟器 消息队列 数据库都运行在2核4G腾讯云服务器
测试每秒保存5000条的情况 约5.5小时保存了近1亿的经纬度
```
-2. 协议解析 [详情点击](./example/simulator/protocol/main.go)
+2. 协议解析 [代码参考](./example/protocol/main.go)
``` txt
使用自定义模拟器 可以轻松生成测试用的报文
生成的报文 可解析成详情描述
@@ -71,9 +71,11 @@ func main() {
### 连接数测试
[详情点击](./example/simulator/README.md#online)
-| 服务端版本 | 客户端 | 并发数 | 服务器配置 | jt808服务使用资源情况 |
-| :---: | :-------: | :--: | :------: | :-------------- |
-| v0.3.0 | 10w+ go模拟器 | 10w+ | 10核32G | 20%cpu 1.4G内存 |
+- 2台云服务器各开5w+客户端 总计10w+
+
+| 服务端版本 | 场景 | 并发数 | 服务器配置 | 服务器使用资源情况 | 描述 |
+| :---: | :-------: | :--: | :------: | :-------------- | :----------------------------: |
+| v0.3.0 | 连接数测试 | 10w+ | 2核4G | 120%+cpu 1.7G内存 | 10.0.16.5上开启服务端和模拟器
10.0.16.14机器上开启模拟器 |
模拟经纬度存储测试
@@ -105,7 +107,7 @@ func main() {
fmt.Println(fmt.Sprintf("模拟器生成的[%x]", data))
jtMsg := jt808.NewJTMessage()
- _ = jtMsg.Decode(data) // 解析固体请求头
+ _ = jtMsg.Decode(data) // 解析固定请求头
var t0x0100 model.T0x0100 // 把body数据解析到结构体中
_ = t0x0100.Parse(jtMsg)
diff --git a/example/simulator/README.md b/example/simulator/README.md
index ca2e1e3..ccd9f39 100644
--- a/example/simulator/README.md
+++ b/example/simulator/README.md
@@ -12,7 +12,6 @@ ulimit -n 1100000
ulimit -u 26600
# 调整可用端口数量
sysctl -w net.inet.ip.portrange.first=5000
-
```
linux系统的 永久修改
@@ -39,27 +38,32 @@ sysctl -a
---
1. 连接数测试
-- 模拟器请求为1次注册 1次鉴权 循环发送心跳(10秒间隔)
-- 目前mac笔记本无线情况只能模拟2个IP 只能测试到10w+
+- 模拟器请求为1次注册 1次鉴权 循环发送心跳(20秒间隔)
+- 使用2台云服务器[2核4G] 因为一个ip有效端口是65535个 测试10w+需要2个ip
### 1.1 操作
服务端
``` shell
cd ../quick_start && go build
-./start
+nohup ./start >./start.log &
```
模拟器
``` shell
cd ./client && go build
-./client -ip=192.168.1.10 -addr=127.0.0.1:8080 -max=55000
-./client -ip=192.168.1.11 -addr=127.0.0.1:8080 -max=55000
+# A服务器的模拟器
+nohup ./client -ip=127.0.0.1 -max=50005 -blc=0 -lc=0 >./test1.log &
+# B服务器的模拟器
+nohup ./client -ip=10.0.16.14 -addr=10.0.16.5:8080 -max=50005 -blc=0 -lc=0 >./test2.log &
```
### 1.2 测试结果
| 服务端版本 | 场景 | 并发数 | 服务器配置 | 服务器使用资源情况 | 描述 |
| :---: | :-------: | :--: | :------: | :-------------- | :----------------------------: |
-| v0.3.0 | 连接数测试 | 10w+ | 10核32G | 20%cpu 1.4G内存 | 客户端和服务端都运行在本地mac笔记本 |
+| v0.3.0 | 连接数测试 | 10w+ | 2核4G | 120%+cpu 1.7G内存 | 10.0.16.5上开启服务端和模拟器
10.0.16.14机器上开启模拟器 |
+
+在本机启动的 腾讯云统计*2 显示150017 实际100012
+![腾讯云监控情况](./testdata/tx.png)
2. 模拟经纬度存储测试
diff --git a/example/simulator/testdata/tx.png b/example/simulator/testdata/tx.png
new file mode 100644
index 0000000..eae92f7
Binary files /dev/null and b/example/simulator/testdata/tx.png differ
diff --git a/shared/consts/event.go b/shared/consts/event.go
deleted file mode 100644
index 1f8f3fa..0000000
--- a/shared/consts/event.go
+++ /dev/null
@@ -1,10 +0,0 @@
-package consts
-
-type HandleEventType int
-
-const (
- AllEvent HandleEventType = -1 // 全部事件 全部指令
- AllReadEvent HandleEventType = -2 // 读事件 指收到终端的指令
- AllWriteEvent HandleEventType = -3 // 写事件 指下发给终端的指令
- AllNonsupportEvent HandleEventType = -4 // 不支持事件 收到不支持的指令
-)
diff --git a/shared/consts/jt808_command.go b/shared/consts/jt808_command.go
index 648499c..0b8cd51 100644
--- a/shared/consts/jt808_command.go
+++ b/shared/consts/jt808_command.go
@@ -1,64 +1,120 @@
package consts
+// JT808CommandType jt808协议的指令
type JT808CommandType uint16
const (
- T0001GeneralRespond JT808CommandType = 0x0001 // 终端-通用应答
- T0002HeartBeat JT808CommandType = 0x0002 // 终端-心跳
- T0100Register JT808CommandType = 0x0100 // 终端-注册
- T0102RegisterAuth JT808CommandType = 0x0102 // 终端-注册鉴权
- T0104QueryParameter JT808CommandType = 0x0104 // 终端-查询参数
- T0107QueryAttribute JT808CommandType = 0x0107 // 终端-查询属性
- T0108UpgradeNotice JT808CommandType = 0x0108 // 终端-升级通知
- T0200LocationReport JT808CommandType = 0x0200 // 终端-位置上报 经纬度坐标是WGS84
- T0201QueryLocation JT808CommandType = 0x0201 // 终端-查询位置
- T0301EventReport JT808CommandType = 0x0301 // 终端-事件上报
- T0302QuestionAnswer JT808CommandType = 0x0302 // 终端-提问应答
- T0303MessagePlayCancel JT808CommandType = 0x0303 // 终端-消息点播取消
- T0608QueryRegionRespond JT808CommandType = 0x0608 // 终端-查询区域应答
- T0700DrivingRecordUpload JT808CommandType = 0x0700 // 终端-行驶记录上传
- T0702DriverInfoCollectReport JT808CommandType = 0x0702 // 终端-驾驶员信息采集上报
- T0704LocationBatchUpload JT808CommandType = 0x0704 // 终端-位置批量上传
- T0800MultimediaEventInfoUpload JT808CommandType = 0x0800 // 终端-多媒体事件信息上传
- T0801MultimediaDataUpload JT808CommandType = 0x0801 // 终端-多媒体数据上传
- T0805CameraShootImmediately JT808CommandType = 0x0805 // 终端-摄像头立即拍照
- T0900DataUpTransparentTransmission JT808CommandType = 0x0900 // 终端-数据上行透传
+ // T0001GeneralRespond 终端-通用应答
+ T0001GeneralRespond JT808CommandType = 0x0001
+ // T0002HeartBeat 终端-心跳
+ T0002HeartBeat JT808CommandType = 0x0002
+ // T0100Register 终端-注册
+ T0100Register JT808CommandType = 0x0100
+ // T0102RegisterAuth 终端-注册鉴权
+ T0102RegisterAuth JT808CommandType = 0x0102
+ // T0104QueryParameter 终端-查询参数
+ T0104QueryParameter JT808CommandType = 0x0104
+ // T0107QueryAttribute 终端-查询属性
+ T0107QueryAttribute JT808CommandType = 0x0107
+ // T0108UpgradeNotice 终端-升级通知
+ T0108UpgradeNotice JT808CommandType = 0x0108
+ // T0200LocationReport 终端-位置上报 经纬度坐标是WGS84
+ T0200LocationReport JT808CommandType = 0x0200
+ // T0201QueryLocation 终端-查询位置
+ T0201QueryLocation JT808CommandType = 0x0201
+ // T0301EventReport 终端-事件上报
+ T0301EventReport JT808CommandType = 0x0301
+ // T0302QuestionAnswer 终端-提问应答
+ T0302QuestionAnswer JT808CommandType = 0x0302
+ // T0303MessagePlayCancel 终端-消息点播取消
+ T0303MessagePlayCancel JT808CommandType = 0x0303
+ // T0608QueryRegionRespond 终端-查询区域应答
+ T0608QueryRegionRespond JT808CommandType = 0x0608
+ // T0700DrivingRecordUpload 终端-行驶记录上传
+ T0700DrivingRecordUpload JT808CommandType = 0x0700
+ // T0702DriverInfoCollectReport 终端-驾驶员信息采集上报
+ T0702DriverInfoCollectReport JT808CommandType = 0x0702
+ // T0704LocationBatchUpload 终端-位置批量上传
+ T0704LocationBatchUpload JT808CommandType = 0x0704
+ // T0800MultimediaEventInfoUpload 终端-多媒体事件信息上传
+ T0800MultimediaEventInfoUpload JT808CommandType = 0x0800
+ // T0801MultimediaDataUpload 终端-多媒体数据上传
+ T0801MultimediaDataUpload JT808CommandType = 0x0801
+ // T0805CameraShootImmediately 终端-摄像头立即拍照
+ T0805CameraShootImmediately JT808CommandType = 0x0805
+ // T0900DataUpTransparentTransmission 终端-数据上行透传
+ T0900DataUpTransparentTransmission JT808CommandType = 0x0900
- P8001GeneralRespond JT808CommandType = 0x8001 // 平台-通用应答
- P8003ReissueSubcontractingRequest JT808CommandType = 0x8003 // 平台-补发分包请求
- P8004QueryTimeRespond JT808CommandType = 0x8004 // 平台-查询时间应答
- P8100RegisterRespond JT808CommandType = 0x8100 // 平台-注册应答
- P8103SetTerminalParams JT808CommandType = 0x8103 // 平台-设置终端参数
- P8104QueryTerminalParams JT808CommandType = 0x8104 // 平台-查询终端参数
- P8105TerminalControl JT808CommandType = 0x8105 // 平台-终端控制
- P8106QuerySpecifyParam JT808CommandType = 0x8106 // 平台-查询指定参数
- P8107QueryTerminalProperties JT808CommandType = 0x8107 // 平台-查询终端属性
- P8108DistributeTerminalUpgradePackage JT808CommandType = 0x8108 // 平台-下发终端升级包
- P8201QueryLocation JT808CommandType = 0x8201 // 平台-查询位置
- P8202TmpLocationTrack JT808CommandType = 0x8202 // 平台-临时位置跟踪
- P8203ManuallyConfirmAlarmInfo JT808CommandType = 0x8203 // 平台-人工确认报警信息
- P8300TextInfoDistribution JT808CommandType = 0x8300 // 平台-文本信息下发
- P8301EventSetting JT808CommandType = 0x8301 // 平台-事件设置
- P8302QuestionDistribution JT808CommandType = 0x8302 // 平台-提问下发
- P8303InfoPlaySetting JT808CommandType = 0x8303 // 平台-信息点播设置
- P8304InfoService JT808CommandType = 0x8304 // 平台-信息服务
- P8400PhoneCallBack JT808CommandType = 0x8400 // 平台-电话回拨
- P8401SetPhoneBook JT808CommandType = 0x8401 // 平台-设置电话本
- P8500VehicleControl JT808CommandType = 0x8500 // 平台-车辆控制
- P8600SetCircularArea JT808CommandType = 0x8600 // 平台-设置圆形区域
- P8601DeleteArea JT808CommandType = 0x8601 // 平台-删除区域
- P8602SetRectArea JT808CommandType = 0x8602 // 平台-设置矩形区域
- P8604PolygonArea JT808CommandType = 0x8604 // 平台-设置多边形区域
- P8606SetRoute JT808CommandType = 0x8606 // 平台-设置路线
- P8608QueryAreaOrRouteData JT808CommandType = 0x8608 // 平台-查询区域或路线数据
- P8701DrivingRecordParamDistribution JT808CommandType = 0x8701 // 平台-行驶记录仪参数下发
- P8800MultimediaUploadRespond JT808CommandType = 0x8800 // 平台-多媒体上传应答
- P8801CameraShootImmediateCommand JT808CommandType = 0x8801 // 平台-摄像头立即拍摄命令
- P8802StorageMultimediaDataRetrieval JT808CommandType = 0x8802 // 平台-存储多媒体数据检索
- P8803StorageMultimediaDataUpload JT808CommandType = 0x8803 // 平台-存储多媒体数据上传
- P8804SoundRecordStartCommand JT808CommandType = 0x8804 // 平台-录音开始命令
- P8805SingleMultimediaDataRetrieval JT808CommandType = 0x8805 // 平台-单条多媒体数据检索
- P8900DataDownTransparentTransmission JT808CommandType = 0x8900 // 平台-数据下行透传
+ // P8001GeneralRespond 平台-通用应答
+ P8001GeneralRespond JT808CommandType = 0x8001
+ // P8003ReissueSubcontractingRequest 平台-补发分包请求
+ P8003ReissueSubcontractingRequest JT808CommandType = 0x8003
+ // P8004QueryTimeRespond 平台-查询时间应答
+ P8004QueryTimeRespond JT808CommandType = 0x8004
+ // P8100RegisterRespond 平台-注册应答
+ P8100RegisterRespond JT808CommandType = 0x8100
+ // P8103SetTerminalParams 平台-设置终端参数
+ P8103SetTerminalParams JT808CommandType = 0x8103
+ // P8104QueryTerminalParams 平台-查询终端参数
+ P8104QueryTerminalParams JT808CommandType = 0x8104
+ // P8105TerminalControl 平台-终端控制
+ P8105TerminalControl JT808CommandType = 0x8105
+ // P8106QuerySpecifyParam 平台-查询指定参数
+ P8106QuerySpecifyParam JT808CommandType = 0x8106
+ // P8107QueryTerminalProperties 平台-查询终端属性
+ P8107QueryTerminalProperties JT808CommandType = 0x8107
+ // P8108DistributeTerminalUpgradePackage 平台-下发终端升级包
+ P8108DistributeTerminalUpgradePackage JT808CommandType = 0x8108
+ // P8201QueryLocation 平台-查询位置
+ P8201QueryLocation JT808CommandType = 0x8201
+ // P8202TmpLocationTrack 平台-临时位置跟踪
+ P8202TmpLocationTrack JT808CommandType = 0x8202
+ // P8203ManuallyConfirmAlarmInfo 平台-人工确认报警信息
+ P8203ManuallyConfirmAlarmInfo JT808CommandType = 0x8203
+ // P8300TextInfoDistribution 平台-文本信息下发
+ P8300TextInfoDistribution JT808CommandType = 0x8300
+ // P8301EventSetting 平台-事件设置
+ P8301EventSetting JT808CommandType = 0x8301
+ // P8302QuestionDistribution 平台-提问下发
+ P8302QuestionDistribution JT808CommandType = 0x8302
+ // P8303InfoPlaySetting 平台-信息点播设置
+ P8303InfoPlaySetting JT808CommandType = 0x8303
+ // P8304InfoService 平台-信息服务
+ P8304InfoService JT808CommandType = 0x8304
+ // P8400PhoneCallBack 平台-电话回拨
+ P8400PhoneCallBack JT808CommandType = 0x8400
+ // P8401SetPhoneBook 平台-设置电话本
+ P8401SetPhoneBook JT808CommandType = 0x8401
+ // P8500VehicleControl 平台-车辆控制
+ P8500VehicleControl JT808CommandType = 0x8500
+ // P8600SetCircularArea 平台-设置圆形区域
+ P8600SetCircularArea JT808CommandType = 0x8600
+ // P8601DeleteArea 平台-删除区域
+ P8601DeleteArea JT808CommandType = 0x8601
+ // P8602SetRectArea 平台-设置矩形区域
+ P8602SetRectArea JT808CommandType = 0x8602
+ // P8604PolygonArea 平台-设置多边形区域
+ P8604PolygonArea JT808CommandType = 0x8604
+ // P8606SetRoute 平台-设置路线
+ P8606SetRoute JT808CommandType = 0x8606
+ // P8608QueryAreaOrRouteData 平台-查询区域或路线数据
+ P8608QueryAreaOrRouteData JT808CommandType = 0x8608
+ // P8701DrivingRecordParamDistribution 平台-行驶记录仪参数下发
+ P8701DrivingRecordParamDistribution JT808CommandType = 0x8701
+ // P8800MultimediaUploadRespond 平台-多媒体上传应答
+ P8800MultimediaUploadRespond JT808CommandType = 0x8800
+ // P8801CameraShootImmediateCommand 平台-摄像头立即拍摄命令
+ P8801CameraShootImmediateCommand JT808CommandType = 0x8801
+ // P8802StorageMultimediaDataRetrieval 平台-存储多媒体数据检索
+ P8802StorageMultimediaDataRetrieval JT808CommandType = 0x8802
+ // P8803StorageMultimediaDataUpload 平台-存储多媒体数据上传
+ P8803StorageMultimediaDataUpload JT808CommandType = 0x8803
+ // P8804SoundRecordStartCommand 平台-录音开始命令
+ P8804SoundRecordStartCommand JT808CommandType = 0x8804
+ // P8805SingleMultimediaDataRetrieval 平台-单条多媒体数据检索
+ P8805SingleMultimediaDataRetrieval JT808CommandType = 0x8805
+ // P8900DataDownTransparentTransmission 平台-数据下行透传
+ P8900DataDownTransparentTransmission JT808CommandType = 0x8900
)
func (s JT808CommandType) String() string {
diff --git a/shared/consts/jt808_location_addition.go b/shared/consts/jt808_location_addition.go
new file mode 100644
index 0000000..9722cb2
--- /dev/null
+++ b/shared/consts/jt808_location_addition.go
@@ -0,0 +1,73 @@
+package consts
+
+// JT808LocationAdditionType 终端-位置附加信息
+type JT808LocationAdditionType uint8
+
+const (
+ // A0x01Mile 里程
+ A0x01Mile JT808LocationAdditionType = 0x01
+ // A0x02Oil 油量
+ A0x02Oil JT808LocationAdditionType = 0x02
+ // A0x03Speed 行驶记录功能获取的速度
+ A0x03Speed JT808LocationAdditionType = 0x03
+ // A0x04ManualAlarm 需要人工确认报警事件的ID
+ A0x04ManualAlarm JT808LocationAdditionType = 0x04
+ // A0x05TirePressure 胎压 2019版本新增
+ A0x05TirePressure JT808LocationAdditionType = 0x05
+ // A0x06CarTemperature 车厢温度 2019版本新增
+ A0x06CarTemperature JT808LocationAdditionType = 0x06
+ // A0x11OverSpeedAlarm 超速报警 详情见表28
+ A0x11OverSpeedAlarm JT808LocationAdditionType = 0x11
+ // A0x12AreaAlarm 进出区域/路线报警 详情见表29
+ A0x12AreaAlarm JT808LocationAdditionType = 0x12
+ // A0x13DrivingTimeInsufficientAlarm 路段行驶时间不足/过长报警 详情见表30
+ A0x13DrivingTimeInsufficientAlarm JT808LocationAdditionType = 0x13
+ // A0x25ExtendVehicleStatus 扩展车辆信号状态位 详情见表31
+ A0x25ExtendVehicleStatus JT808LocationAdditionType = 0x25
+ // A0x2AIOStatus IO状态位 详情见表32
+ A0x2AIOStatus JT808LocationAdditionType = 0x2A
+ // A0x2BAnalog 模拟量 bit0-15 ADD bit16-31 AD1
+ A0x2BAnalog JT808LocationAdditionType = 0x2B
+ // A0x30WIFISignalStrength 无线通信网络信号强度 数据类型位BYTE
+ A0x30WIFISignalStrength JT808LocationAdditionType = 0x30
+ // A0x31GNSSPositionNum GNSS定位卫星数 数据类型位BYTE
+ A0x31GNSSPositionNum JT808LocationAdditionType = 0x31
+ // A0xE0Custom 厂商自定义
+ A0xE0Custom JT808LocationAdditionType = 0xE0
+)
+
+func (t JT808LocationAdditionType) String() string {
+ switch t {
+ case A0x01Mile:
+ return "里程"
+ case A0x02Oil:
+ return "油量"
+ case A0x03Speed:
+ return "行驶记录功能获取的速度"
+ case A0x04ManualAlarm:
+ return "需要人工确认报警事件的ID"
+ case A0x05TirePressure:
+ return "胎压"
+ case A0x06CarTemperature:
+ return "车厢温度"
+ case A0x11OverSpeedAlarm:
+ return "超速报警"
+ case A0x12AreaAlarm:
+ return "进出区域/路线报警"
+ case A0x13DrivingTimeInsufficientAlarm:
+ return "路段行驶时间不足/过长报警"
+ case A0x25ExtendVehicleStatus:
+ return "扩展车辆信号状态位"
+ case A0x2AIOStatus:
+ return "IO状态位"
+ case A0x2BAnalog:
+ return "模拟量"
+ case A0x30WIFISignalStrength:
+ return "无线通信网络信号强度"
+ case A0x31GNSSPositionNum:
+ return "GNSS定位卫星数"
+ case A0xE0Custom:
+ return "厂商自定义"
+ }
+ return "非标准的附加信息"
+}