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. android 启动socket 失败:socket(af_inet sock_stream 0) 返回-1

    Android 启动socket 失败:socket(af_inet sock_stream 0) 返回-1 原因权限问题, 应该添加如下权限: <uses-permission android ...

  2. XML-RPC 实现C++和C#交互

    我们通常会面对这样的问题:整合不同平台或不同类库,这些类库可能来自不同的语言,甚至不同的操作系统. 如何解决这类棘手的问题呢? 一.方案介绍 解决不同语言交互的方法有不少,对我了解的windows系统 ...

  3. 流畅的python第八章对象引用,可变性和垃圾回收

    变量不是盒子 在==和is之间选择 ==比较两个对象的值,而is比较对象的标识 元组的相对不可变姓 元组与多数的python集合(列表,字典,集,等等)一样,保存的是对象的引用.如果引用的元素是可变的 ...

  4. ubuntu中文设置方法

    1.首先打开ubuntu设置(右上角的齿轮),或者直接在左面找到设置,如下图所示. 2.然后点[language support]设置,如下图所示. 3.在弹出的窗口再点击[install]设置操作, ...

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

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

  6. C# WinForm 异步执行耗时操作并将过程显示在界面中

    private void button3_Click(object sender, EventArgs e)        {            RunAsync(() =>         ...

  7. jsp el 自定义方法 tld 说明

    使用 el 的过程中,需要使用到后端代码处理逻辑,这个时候我们就需要自定义 方法. 如我们后端代码定义如下: package com.rhythmk.common; public class FncH ...

  8. JAVA基础(10)——IO、NIO

    转载:http://blog.csdn.net/weitry/article/details/52964948 JAVA基础系列规划: JAVA基础(1)——基本概念 JAVA基础(2)——数据类型 ...

  9. wifi简单笔记

    什么是wifi: Wi-Fi是一种可以将个人电脑.手持设备(如PDA.手机)等终端以无线方式互相连接的技术.Wi-Fi是一个无线网路通信技术的品牌,由Wi-Fi联盟(Wi-Fi Alliance)所持 ...

  10. IOS Exception 1(RangeText="[SKTexture]()")

    CompileSwift normal x86_64 com.apple.xcode.tools.swift.compiler cd /Users/Rubert/workspaces/Panda ex ...