道路运输车辆卫星定位系统JT/T808服务实现和压测
在工作上的需要接触道路运输车辆卫星定位系统相关应用,由于自己对网络服务的编写比较感兴趣,所以利用空闲时间实现了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服务实现和压测的更多相关文章
- JT/T 1077-2016《道路运输车辆卫星定位系统车载视频平台技术要求》平台标准符合性检测合同
合同编号: 道路运输车辆卫星定位系统 平台标准符合性检测合同 委托方(甲方): 受托方(乙方): 交通运输通信信息工程质量检测中心 签订时间: 签订地点: 北京市 委托方(甲方): 委托方(甲方): ...
- JT/T 808-2013 道路运输车辆卫星定位系统北斗兼容车载终端通讯协议技术规范
文档下载地址:JT/T 808-2013 道路运输车辆卫星定位系统北斗兼容车载终端通讯协议技术规范
- JTT808、JTT809、JTT796、JTT794、JTT1077、JTT1078区别与交通部道路运输车辆卫星定位系统部标标准大全下载地址
部标JT/T808协议.JT/T809协议.JT/T796标准.JT/T794标准的区别,他们是基于不同的通信场景,不同的通信对象,不同的设计目的和目标而制定出来的.首先要知道这些标准的全称是什么意思 ...
- 交通部道路运输车辆卫星定位系统部标JTT808、809、796标准大全
无论是开发GPS设备硬件还是开发应用软件,都要面临一个标准,这个标准就是国家交通部发布的道路运输车辆卫星定位系统部标认证标准,它涵盖了GPS硬件设备参数.功能标准,也包括了设备上传到应用平台的协议标准 ...
- JT796、JT808、JT809、JT1076、JT1077、JT1078部标平台过检道路运输车辆卫星定位系统企业视频监控平台检测登记表
道路运输车辆卫星定位系统企业视频监控平台检测登记表的具体格式如下: 报名检测需要以下材料: 0检测报名须知.doc 点击下载 1检测意向单.doc 点击下载 2-1道路运输车辆卫星定位系统企业 ...
- 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选
一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...
- python服务端多进程压测工具
本文描述一个python实现的多进程压测工具,这个压测工具的特点如下: 多进程 在大多数情况下,压测一般适用于IO密集型场景(如访问接口并等待返回),在这种场景下多线程多进程的区分并不明显(详情请参见 ...
- Jmeter压测Thrift服务接口
此文已由作者夏鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Apache Jmeter是基于Java开发的性能测试工具,支持多种协议的测试,包括:Web(HTTP/HTT ...
- 基于JT/T808协议的车辆监控平台架构方案
技术支持QQ:78772895 1.接入网关应用采用mina/netty+spring架构,独立于其他应用,主要负责维护接入终端的tcp链接.上行以及下行消息的解码.编码.流量控制,黑白名单等安全控制 ...
随机推荐
- 网络克隆 主要是 PXE网卡启动 随笔
- 【C语言编程练习】5.12 兔子产仔问题
1. 题目要求 把一对新生的兔子关在屋子里,已知一对两个月大的兔子以后买一个月可以生一对小兔子,而这一对心生的小兔子初生两个月以后才可以生小兔子,假如一年内没有死亡,一年可以繁殖成多少对? 2. 题目 ...
- That girl
音标 词汇 Purple Glasses Black Hat Brown Bag Clothes Blue Jacket Pink Handbag Sock White Skirt Shoe 1, s ...
- QT—QTextEdit控件显示日志
功能:利用QTextEdit开发一个日志显示窗口.没有太多操作,需要实现的是日志自动向上滚动,总体的日志量可以控制在x行(比如300行)以内:其他的应用功能我后面继续添加 #include <Q ...
- ssm框架各自的作用
- Round #2
题源:来自hzwer整理的题 2014-5-10 NOIP模拟赛 by coolyangzc Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模 ...
- npm install命令详解
-S,–save 安装包信息将加到dependencies(生产阶段的依赖) npm install --save 或 npm install -S -D, –save-dev 安装包信息将加到dev ...
- [LeetCode] Fibonacci Number 斐波那契数字
The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...
- python爬虫第六天
今天继续学习一些实战爬虫 链接爬虫实战 要求:把一个网页里所有的链接地址提取出来 思路:(1)确定爬取的入口链接 (2)构建提取链接的正则表 ...
- live555工程建立与调试
Live555是一款开源的RTSP服务器,下载地址http://www.live555.com/liveMedia/public/ 下载下来的代码只有源文件,没有工程文件.那么如何使用VS 调试liv ...