GPS部标监控平台的架构设计(八)-基于WCF的平台数据通信设计
总体来讲,GPS部标平台的软件开发是一个对网络通信和应用程序之间通信的技术应用密集型的开发工作,也是有一定设计技术含量的工作。
1.设计通信接口
在设计的时候,根据职责划分,拆分成不同的应用子系统,对各个子系统进行功能隔离,并通过设计接口规定子系统直接的调用规约。
首先我们根据部标平台的要求,设计和开发出各个主要的服务器子系统,这是平台中最核心的子系统,在实际的应用中,由于车辆规模的大小和行业需求,还会扩展出各种业务子系统。核心子系统如下:
1)808GPS服务器,采用交通部的部标808协议,负责与终端的数据接收、指令下发; 参见:基于部标JT/T 808协议及数据格式的GPS服务器
2)809转发服务器,采用交通部的部标809协议,作为企业下级平台,负责转发GPS数据到政府平台的服务器;参见:基于JT/T809-2011的(已过检)GPS平台数据交换及转发服务器
3)809政府服务器,采用交通部的部标809协议,作为政府上级平台,负责与下级平台进行全双工通信。
4)GPS监控客户端,采用自定义的数据通信协议与服务器进行数据通信,为用户提供监控UI,各种监控功能都直接反映在此客户端上。交通部的部标检测和认证的所有工作,虽然涉及了平台的各个部分,但是检测的发起都是从客户端发起的,其他的子系统,我们统称为后台。需要购买部标平台源码的可以联系(2379423771@qq.com)

2.接下来,我们需要确定子系统直接的通信框架。
很多老牌的GPS程序员,对于Socekt特别熟悉,只要是通信,就设计协议,然后使用Socket框架,里面侵入了大量的业务逻辑。时间长了,代码非常难以维护。
现在开发技术的发展似乎与他们绝缘。连WebService都少用。更不用说瑞士军刀WCF框架了。这种面向字节的设计和开发,常常要重复编写大量的二进制字节转换,而现在我们更喜欢的是面向接口的设计和开发,底层的东西我们已经不需要考虑,通过简单的配置就可以快速的构建出两个应用程序之间的数据通信。采用WCF,可以让我们基本摆脱掉那些令人厌恶的Socket套路。
比如我们再808中,设计一个实时数据服务,RealDataService和接口IRealDataService, 编写一个获取实时数据的方法,通过WCF框架的配置,就可以快速的为其他子系统提供实时数据的推送和转发服务了。
而且,我们也可以通过配置,将WCF转换成JSON格式,这样手机查车等手机客户端引用也可以和服务器进行数据通信,获取数据。
3.全双工通信
实际上子系统的通信基本全是全双工的通信,比如拍照的通信:809下级平台服务器收到上级平台的拍照指令后,将指令下发808服务器,808服务器再下发给终端,终端拍照应答给808服务器,808服务器再将拍照数据转发给809下级平台,809下级平台再将拍照数据转发给809上级平台。虽然我们描述流程的时候,仿佛是同步的,实际上网络通信是异步的全双工通信。可以看出部标要求的通信需求决定了子系统之间的通信的复杂性,而WCF的通信框架较好的隐藏掉底部通信的复杂性,满足顶层业务开发的需求。

4)部标流程检测和运行检测
部标平台开发的复杂性就在于,我们可以快速开发出一个大面上过得去的东西,但是却无法开发出一个严格符合要求的部标平台,从上图中可以看出一个拍照指令,需要贯穿四个子系统,并且是异步的。如何跟踪各种指令在横跨各个子系统或平台时的发送状态、执行状态和应答状态,不仅仅是一个需要在用户体验上面下功夫的功能,在交通部的部标认证的检测中,最最麻烦的就是运行检测,因为要跨两个平台,政府平台和企业平台,企业平台内部要跨越终端、808服务器、809下级平台服务器等多个子系统。检测失败,可能出现在各个环节当中,检测人员只是平静的告诉你没有通过,而我们剩下就是猜了。所以每个系统必须要有较好的指令监控的功能,以便于较好的应对实际的部标检测中出现的意外情况。以下是对809转发服务器的指令的数据包监控。

GPS部标监控平台的架构设计(八)-基于WCF的平台数据通信设计的更多相关文章
- GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台
部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...
- 基于C#和Asp.NET MVC开发GPS部标监控平台
基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...
- 基于BootStrap框架构建快速响应的GPS部标监控平台
最近一个客户要求将gps部标平台移植到bootStrap框架作为前端框架,符合交通部796部标只是他们的一个基本要求,重点是要和他们的冷链云物流平台进行适配.我自己先浏览了客户的云物流平台的界面,采用 ...
- GPS部标监控平台的架构设计(七)-压力测试
部标监控平台的压力测试是部标检测流程的最后一个检测环节,也是最难的,很多送检的企业平台都是卡壳在这一个环节.企业平台面临的问题如下: 1.对于压力测试的具体指标要求理解含糊,只知道是模拟一万辆车终端进 ...
- GPS部标监控平台的功能设计(一)-功能列表
在2011年交通部的796标准推出后,随着各地交管部门的硬性要求,大多数的GPS监控系统或者车辆管理系统或者物流管理系统,无论是旧的,还是新开发的,都必须要以796标准为基础蓝本,首先要满足796的要 ...
- 【测试设计】基于正交法的测试用例设计工具--PICT
前言 我们都知道成对组合覆盖是一种非常有效的测试用例设计方法,但是实际工作过程中当成对组合量太大,我们往往很难做到有效的用例覆盖. PICT是微软公司出品的一款成对组合命令行生成工具,它很好的解决了上 ...
- GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...
- GPS部标平台的架构设计(四)-百度地图设计
部标GPS软件平台之百度地图设计 地图是客户端中不可缺少的一个模块,很多人在设计和画图时候,喜欢加上地图引擎这样高大上的字眼,显得自己的平台有内涵,说白了就是用第三方的SDK来开发,早期的GPS监 控 ...
- GPS部标平台的架构设计(一)
设计和开发一个GPS系统似乎并不太难,很多人马上就想到了地图,放大,缩小之类的功能,最多就是在加点报表之类的东西,就成了. 这种观点造成了业界内,很多GPS系统粗制滥造,不堪大用. 事实上,设计和开发 ...
随机推荐
- EventBus 一
一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...
- 弹性布局flex-兼容问题
这里弹性布局的用法就不说了 用过的都知道很方便 虽然现在弹性布局已经实现标准了 但是还是存在一些兼容问题 旧版本 (一些低版本的浏览器) display:-webkit-box; 新版本(目前的标准版 ...
- MySQL 分组后,统计记录条数
分组后,统计记录条数: SELECT num,count(*) AS counts from test_a GROUP BY num; 查询结果如下: 对num去重后的数量的统计: SELECT co ...
- C# 的EF框架怎么连接Oracle数据库
安装odp.net ODP.NET你不需要安装Oracle,不需要配置oracle.key文件,不需要配置TnsNames.Ora文件 不需要配置环境变量:完全的傻瓜式的在没有安装oracle数据库或 ...
- Noip2016
<这篇是以前的,不开新的了,借版面来换了个标题> 高二了 开学一周,每天被文化课作业碾压... 但是仍然阻挡不了想刷题的心情... 对付noip2016的几块:(有点少,以后补) 高精度( ...
- C# 可视化读取文件、文件夹
OpenFileDialog fd = new OpenFileDialog(); fd.Filter = "txt files (*.txt)|*.txt|All files(*.*)|* ...
- 【转】HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别
转自:http://blog.csdn.net/paincupid/article/details/47746341 一.HashMap和TreeMap区别 1.HashMap是基于散列表实现的,时间 ...
- Python之路第一课Day1--随堂笔记
课堂大纲: 一.Python介绍 二.发展史 三.Python 2 or 3? 四.安装 五.Hello World程序 六.变量 七.用户输入 八.模块初识 九..pyc是个什么鬼? 十.数据类型初 ...
- [转]RMAN检测数据库坏块
backup validate check logical database; select * from v$database_block_corruption; RMAN> backup v ...
- 安卓中級教程(6):annotation的基本用法
package com.example.ele_me.activity; import android.annotation.SuppressLint; import android.app.Acti ...