Apache MINA 是 Apache 组织的一个开源项目,为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 也是Java开发者的一个福利(.NET目前还没有类似封装的这么好的基础socket通信框架),不用像.NET开发者,吭哧吭哧的写上半天,一看还在搞socket库呢,还没进入应用层面。

这个框架的优点:

– 异步
– 无阻塞
– 事件驱动
– 支持TCP, UDP, APR, 串口…
– 通过 过滤器(Filters)实现扩展性
– 同时提供协议框架

Netty也是一个高性能的框架,和Mina不分伯仲,不过对于809服务器,就两个链接,一个主连接,一个从连接,不像809网关服务器,接入几万台终端。所以在809系统中,用什么样的框架,都不重要。重要的是在809协议解析和应用层面上。

开发部标809协议从文档中一眼就可以看出,协议设计者把面向对象的思想带入到了协议当中,造成了协议的不容易阅读和不容易理解,但在协议本身的开发和实现非常适合用Mina框架。

809协议的设计者,考虑的东西太多了,造成了协议的复杂。同时转发服务器本身扮演者承上启下的角色,需要和808服务及政府运管平台进行交互,这样整个809的开发难度要远大于808服务,基于流程测试的难度就更大。

I/O Filter Chain - 这是一个由多个过滤器组成的过滤器链,在这个环节将字节数据转换到特定的数据结构中(Filters/Transforms bytes into desired Data Structures and vice-versa) 
I/O Handler - 实际的业务逻辑部分,提供最终的OnMessageRecved事件,为外部所调用。

所以我们设计的时候,

1.首先要设计一个协议抽象类,他具有每一个协议命令的所有共性的属性。

2.可以在主链路发送的时候,设计一个编码过滤器,在从链路发送的时候,设计一个解码过滤器,分别对抽象类进行字节数组的转换。这样就可以了解决几十个协议的辛苦的解析和封装带来的繁杂工作量了。

IoAcceptor acceptor = new NioSocketAcceptor();
//记录发送和接收的809协议的原始16进制报文
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
//JT/T 809协议编码器
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new JT809MessageCodecFactory( Charset.forName( "GBK" ))));
//JT?T 协议处理类
acceptor.setHandler( new JT809MessageHandler() ); acceptor.getSessionConfig().setReadBufferSize( 2048 );
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
acceptor.bind(new InetSocketAddress(PORT));

  

3.这样整个结构就非常清晰了, 由于过滤器是透明的,所以从外部接口来看是对类的发送和接收了,避免了重复编写底层转换代码。

4.剩下就是更加复杂的应用层面的工作了,需要设计和808服务交互的接口,在得到运管的请求的时候,能够调用808的数据,转发给运管,同时接收到运管的数据后,再转发给808. 每个协议命令不仅要逐一实现。还要考虑入库和转发给808服务。

提供809转发生产系统源码(已过检),同时包含上下级平台,可以互相模拟测试,也可以用下级平台发送数据,用上级平台来接收数据,收费1500元。需要JT 809源码的(C#、Java版本的都有, 可选其一)

可以联系我:2379423771@qq.com

基于Java Mina 和Netty 通信框架的JT/T809转发服务器设计的更多相关文章

  1. 基于Java Mina 通信框架的JT/T809转发服务器设计

    Apache MINA 是 Apache 组织的一个开源项目,为开发高性能和高可用性的网络应用程序提供了非常便利的框架. 也是Java开发者的一个福利(.NET目前还没有类似封装的这么好的基础sock ...

  2. 基于Java Mina框架的部标jt808服务器设计和开发

    在开发部标GPS平台中,部标jt808GPS服务器是系统的核心关键,决定了部标平台的稳定性和行那个.Linux服务器是首选,为了跨平台,开发语言选择Java自不待言.需要购买jt808GPS服务器源码 ...

  3. 基于Java Mina框架的部标808服务器设计和开发

    在开发部标GPS平台中,部标808GPS服务器是系统的核心关键,决定了部标平台的稳定性和行那个.Linux服务器是首选,为了跨平台,开发语言选择Java自不待言. 我们为客户开发的部标服务器基于Min ...

  4. Spark1.6之后为何使用Netty通信框架替代Akka

    解决方案: 一直以来,基于Akka实现的RPC通信框架是Spark引以为豪的主要特性,也是与Hadoop等分布式计算框架对比过程中一大亮点. 但是时代和技术都在演化,从Spark1.3.1版本开始,为 ...

  5. 【Java】分布式RPC通信框架Apache Thrift 使用总结

    简介 Apache Thrift是Facebook开源的跨语言的RPC通信框架,目前已经捐献给Apache基金会管理,由于其跨语言特性和出色的性能,在很多互联网公司得到应用,有能力的公司甚至会基于th ...

  6. Java面试必问通信框架NIO,原理详解

    NIO 流与块 通道与缓冲区 缓冲区状态变量 文件 NIO 实例 选择器 套接字 NIO 实例 内存映射文件 NIO与IO对比 Path Files NIO 新的输入/输出 (NIO) 库是在 JDK ...

  7. 基于Java+Selenium的WebUI自动化测试框架(十四)-----使用TestNG的Sample

    到目前为止,我们所写的东西,都是集中在如何使用Selenium和Java来定位和读取元素.那么,到底如何具体开展测试,如何实现参数化,如何实现判定呢?下面,我们来看看Java应用程序的测试框架吧. 当 ...

  8. Spark Netty 通信框架解析

    1.RpcEndpoint: RPC端点 Spark针对每个节点(Client.Master.Worker)都称之为一个RpcEndpoint,且都实现RpcEndpoint接口,内部根据不同端点的需 ...

  9. 基于Java+Selenium的WebUI自动化测试框架(一)---页面元素定位器

    对于自动化测试,尤其是UI的自动化测试.是很多做黑盒功能测试的同学,入门自动化测试一个最为直观的或者说最容易理解的途径之一. 对于手工测试和自动化测试的优劣,网上有很多论述,在这里不作展开讨论.但是, ...

随机推荐

  1. Cisco路由技术基础知识详解

    第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是(  )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12  ...

  2. zigbee 学习笔记

    在德州仪器的站点:http://www.ti.com.cn/tool/cn/z-stack上下载安装zigbee2007协议栈版,我的是ZStack-CC2530-2.3.0-1.4.0. 以下演示一 ...

  3. [转]sa不能远程连接sql server 2008的解决办法

    本文转自:http://www.cnblogs.com/chendaoyin/archive/2012/08/25/2656900.html 方法: 开始->Microsoft SQL Serv ...

  4. http://blog.csdn.net/xingfuzhijianxia/article/details/6433918

    http://blog.csdn.net/xingfuzhijianxia/article/details/6433918

  5. SQL通过身份证获取信息

    SELECT t.identity_number '身份证号',SUBSTR(t.identity_number,1,2) AS "省份",SUBSTR(t.identity_nu ...

  6. Log文件太大,手机ROM空间被占满

    客户要装车,进行项目验收了. 今天拿着几台手机去客户处,其中有一台手机从昨天晚上开始就一直开着我们的APP,今天早晨打开手机发现APP没有反应了. 在程序列表中将其杀掉,然后再启动程序,发现程序不能启 ...

  7. centos6.8服务器配置之编译安装PHP、配置nginx

    php version 5.6.31.nginx version: nginx/1.10.2 1.下载: wget http://cn2.php.net/distributions/php-5.6.3 ...

  8. Rxjava2.0 链式请求异常处理

    使用Rxjava2.0的过程中,难免会遇到链式请求,而链式请求一般都是第一个抛异常,那么后面的请求都是不会走的.现在来讨论一下链式请求的一种异常处理方法.例如: 一个登录-->通过登录返回的to ...

  9. EditText输入为空button不可点击搜索

    一丶任务详情 二丶改动后演示效果 三丶改动过程 分析:非常明显这里是须要监听EditText,推断输入字符串长度是否不为0来改变Button样式 首先的屡清楚代码逻辑在适当的位子加监听推断是最好的处理 ...

  10. JavaScript第二课

    1.关于鼠标事件有: onmouseover(),onmouseout(),onmousedown(),onmouseup(),onclick()事件. 2.创建JavaScript对象: 方法1:通 ...