在工作上的需要接触道路运输车辆卫星定位系统相关应用,由于自己对网络服务的编写比较感兴趣,所以利用空闲时间实现了JT/T808的一些协议和相关服务(不得不说这种协议的设计在解释的确导致性能上的损耗,特别针地托管语言的C#来说就更加容易导致性能问题,不过对于现有硬件资源来说一台简配的PC支撑上几万个终端那还是没什么压力的).主要基于兴趣来写所以JT/T808只实现了几个常用的协议:0x0002,0x0200,0x0100等.

为了更好地进行模拟测试还实现了一个简单的JT/T808模拟器方便进行一些简单的测试

消息封装

一个好的消息封装会给消息扩展带来极大的方便和效率(不过不得不面对资源损耗的加大).Beetle.JT808采用对象结合特性的方式来描述一个JT808消息,特别对于一个多位组合的属性也通过对象化来表现,这样可以上使用者使用起来更方便和简单.

    /// <summary>/// 终端注册/// </summary>[MessageType(ID = 0x0100)]public class Register {/// <summary>/// 标示终端安装车辆所在的省域,0保留,由平台取默认值。省域ID采用GB/T 2260中规定的行政区划代码六位中前两位/// </summary>[UInt16Handler]public ushort Province { get; set; }/// <summary>/// 标示终端安装车辆所在的市域和县域,0保留, 由平台取默认值。市县域ID采用GB/T 2260中规定的行政区划代码六位后四位/// </summary>[UInt16Handler]public ushort City { get; set; }/// <summary>/// 五个字节,终端制造商编码。/// </summary>[ASCIIHandler(5)]public string Provider { get; set; }/// <summary>/// 八个字节,此终端型号由制造商自行定义,位数不是八位的,补空格。/// </summary>[ASCIIHandler(8)]public string DeviceNumber { get; set; }/// <summary>/// 七个字节,由大写字母和数字组成,此终端ID由制造商自行定义/// </summary>[ASCIIHandler(7)]public string DeviceID { get; set; }/// <summary>/// 车牌颜色,按照JT/T 415-2006的5.4.12/// </summary>[ByteHandler]public byte Color { get; set; }/// <summary>/// 公安交通管理部门颁发的机动车号牌/// </summary>[GBKHandler]public string PlateNumber { get; set; }}
}

服务器封装

有服务端封装上也是采购消息事件来驱动消息逻辑的处理,这样在扩展消息处理上也非常方便

        protected virtual void OnPostion(Message msg, Messages.Postion e, Beetle.Express.IChannel channel){channel.Name = msg.SIM;channel["GPS_INFO"] = e;if (Loger.Enabled(LogType.DEBUG))Loger.Process(LogType.DEBUG, "{0} postion lng:{1}/lat:{2} time:{3}", msg.SIM, e.Longitude, e.Latitude, e.Time);ReturnCenterResponse(msg, channel);}protected virtual void OnRegister(Message msg, Messages.Register e, Beetle.Express.IChannel channel){if (Loger.Enabled(LogType.DEBUG))Loger.Process(LogType.DEBUG, "{0} registed platenumber:{1}", msg.SIM, e.PlateNumber);Message result = MessageFactory.CreateMessage<RegisterResponse>(msg.SIM);RegisterResponse response = result.GetBody<RegisterResponse>();response.BusinessNO = msg.BussinessNO;response.Result = RegisterStatus.Success;response.Signature = Guid.NewGuid().ToString("N");result.Send(channel);}protected virtual void OnSignature(Message msg, Messages.ClientSignature e, Beetle.Express.IChannel channel){if (Loger.Enabled(LogType.DEBUG))Loger.Process(LogType.DEBUG, "{0} signature {1}", msg.SIM, e.Signature);ReturnCenterResponse(msg, channel);}protected virtual void OnNotImplement(Message msg, Messages.MessageNotImplement e, Beetle.Express.IChannel channel){if (Loger.Enabled(LogType.DEBUG))Loger.Process(LogType.DEBUG, "{0} message:{1} not implement!", msg.SIM, e.MessageID);ReturnCenterResponse(msg, channel);}

压测结果

虽然对服务功能进行了大量的抽象封装,在效率上会有很大的开销损耗.但在现有的硬件资源下并不会存在多大问题.以下是模拟10000个终端设备每5秒提交一条车辆行驶信息的测试情况:

服务端是一台虚拟化的4核,16G内存的电脑.

行车信息:

                Messages.Postion postion = new Messages.Postion();postion.Direction = (ushort)ran.Next(ushort.MinValue, ushort.MaxValue);postion.Height = (ushort)ran.Next(ushort.MinValue, ushort.MaxValue);postion.Latitude = (uint)ran.Next(0, 2000000);postion.Longitude = (uint)ran.Next(0, 2000000);postion.Speed = (ushort)ran.Next(ushort.MinValue, ushort.MaxValue);postion.Time = DateTime.Now;postion.FuelGauge.Value = (ushort)ran.Next(ushort.MinValue, ushort.MaxValue);postion.Milometer.Value = (uint)ran.Next(0, 2000000);postion.Speedometer.Value = (ushort)ran.Next(10, 200);Client.Postion(postion);

服务器压力17小时后的结果:

测试终端情况:

道路运输车辆卫星定位系统JT/T808服务实现和压测相关推荐

  1. 基于《道路运输车辆卫星定位系统车载视频通信协议》(JT/T 1078-2016)的流媒体服务器

    流媒体服务器是一个基于<道路运输车辆卫星定位系统车载视频通信协议>(JT/T 1078-2016)通信协议规范(实现1078协议中5.5.3章节"实时音视频及透传数据传输&quo ...

  2. 平台过检新标准GB/T 35658-2017 道路运输车辆卫星定位系统平台技术要求标准介绍

    GB/T 35658-2017 道路运输车辆卫星定位系 统平台技术要求标准介绍" 原平台过检标准: JT/T 796-2011<道路运输车辆卫星定位系统平台技术要求> JT/T ...

  3. 交通运输部办公厅关于印发《道路运输车辆卫星定位系统车载终端和平台标准符合性技术审查工作规范》的通知

    发文单位:交通运输部办公厅 文 号:交办运[2016]138号 发布日期:2016-10-25 执行日期:2017-1-1 各省.自治区.直辖市.新疆生产建设兵团交通运输厅(局.委): 经交通运输部同 ...

  4. jt808终端鉴权_JT/T 808- 2019道路运输车辆卫星定位系统终端通信协议及数据格式...

    JT/T 808- 2019 道路运输车辆卫星定位系统终端通信协议及数据格式 1范围 本标准规定了道路运输车辆卫星定位系统车载终端与监管/监控平台之间的通信协议与数据格式,包括协议基础.通信连接.消息 ...

  5. 第21批符合道路运输车辆卫星定位系统标准的系统平台

    序号 平台名称 平台类别 申请单位 平台编号 公司所在地 备注 1 BDHT车辆信息管理平台 企业监控平台 北斗航天卫星应用科技集团有限公司 52101 北京市 2 齐鲁泓霖北斗位置服务平台 企业监控 ...

  6. 行驶记录仪和道路运输车辆卫星定位系统相关标准总结

    1.主要标准 GB/T 19056-2012   汽车行驶记录仪 JT/T 794                 道路运输车辆卫星定位系统(车载终端技术要求) JT/T 796            ...

  7. 道路运输车辆卫星定位系统企业监控平台标准符合性检测和道路运输车辆卫星定位系统企业视频监控平台检测攻略...

    卫星定位平台部标平台检测阶段步骤道路运输车辆卫星定位系统企业监控平台标准符合性检测和道路运输车辆卫星定位系统企业视频监控平台检测攻略 最新更新2019年9月9日16:21:37     步骤1.报名 ...

  8. 第22批符合道路运输车辆卫星定位系统标准的系统平台

    序号 平台名称 平台类别 申请机构名称 公司所在地 备注 1 博实智通车联网卫星定位监控平台 企业监控平台 天津博实智通科技有限公司 天津市 2 利顺卫星定位智能监控服务平台 企业监控平台 河北利顺交 ...

  9. JT/T808模拟器、企业压测工具使用

    网上能找到使用说明,但总会有一些坑,感觉很难受 1. 安装mysql的msi文件 2. 安装navicat 3. 登录本地mysql 服务,新建数据库testmingo 4.导入数据备份文件 库里面大 ...

最新文章

  1. android窗口管理机制
  2. boost:验证BOOST_CONCEPT_ASSERT捕获了错误
  3. 谷歌大脑:探索权重无关神经网络
  4. 几何元素网页设计的力量,让人眼前一亮
  5. Java 实现计时器
  6. html5微信分享图标和文本设置,科技常识:Html5 实现微信分享及自定义内容的流程...
  7. mysql 帮助文档使用
  8. java poi excel转pdf_java_poi导入导出excel.pdf
  9. 宝藏又小众的室内场景unity3d模型素材网站分享
  10. CGO 之 Dll调用
  11. DDoS攻击:无限战争
  12. 3.9 拆解小红书爆文,流量密码原来是这些【玩赚小红书】
  13. 使用大白菜U盘重装系统
  14. UVALive 3523 圆桌骑士
  15. python在vsc制作动态二维码_用VScode愉快的写python代码
  16. WIN10 启动后花屏
  17. 数据恢复基础和进阶教程(三)
  18. 宽带中KB与Kb的区别
  19. easyui datagrid单独修改某列的值
  20. 74HC1G14GV 多路复用开关 IC

热门文章

  1. 导出目录结构_Selenium Webdriver 3.X源码分析之核心目录结构
  2. java读取属性文件的方法_java读取属性文件的方法
  3. ftp工具之本地操作命令
  4. 业务需求、客户需求与功能需求
  5. lamp mysql脚本_初次尝试利用脚本自动编译搭建LAMP-----Mysql
  6. linux+nm+内容详解,【Linux】nm命令中符号类型详解
  7. 手机麦克风声音太大_全民K歌必备利器,得胜PH-125手机K歌麦克风让你轻松拥有好声音...
  8. 电脑开机一会就蓝屏怎么回事_常见的电脑蓝屏是怎么回事?学会三种解决方法,远离电脑维修店...
  9. Vue+Leaflet实现加载Stamen显示地图
  10. Winform中实现自定义水晶按钮控件(附代码下载)