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 "非标准的附加信息" +}