基于Java Mina 和Netty 通信框架的JT/T809转发服务器设计
这个框架的优点:
– 异步
– 无阻塞
– 事件驱动
– 支持TCP, UDP, APR, 串口…
– 通过 过滤器(Filters)实现扩展性
– 同时提供协议框架
开发部标809协议从文档中一眼就可以看出,协议设计者把面向对象的思想带入到了协议当中,造成了协议的不容易阅读和不容易理解,但在协议本身的开发和实现非常适合用Mina框架。
Netty框架和Mina框架都是底层的通信框架,在性能上差别不大,特别是809协议通信,一个平台只有两个链接,开发者不需要过多关注在底层的框架选型上,因为开发809,主要是809协议本身的逻辑复杂性。
I/O Filter Chain - 这是一个由多个过滤器组成的过滤器链,在这个环节将字节数据转换到特定的数据结构中(Filters/Transforms bytes into desired Data Structures and vice-versa)
I/O Handler - 实际的业务逻辑部分,提供最终的OnMessageRecved事件,为外部所调用。
所以我们设计的时候,也要分层设计,主要分为通讯层、解析层和数据应用层
1.首先要设计一个协议抽象类,他具有每一个协议命令的所有共性的属性。
2.可以在主链路发送的时候,设计一个编码过滤器,在从链路发送的时候,设计一个解码过滤器,分别对抽象类进行字节数组的转换。这样就可以了解决几十个协议的辛苦的解析和封装带来的繁杂工作量了。
1
2
3
4
5
6
7
8
9
10
|
IoAcceptor acceptor = new NioSocketAcceptor(); 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服务器源码联系:2379423771@qq.com
5.809源码包含上下级两个模块,可以互相测试,也可以用于不同的项目当中。
上级平台可以用来接收多个下级平台的接入,可以分配多个平台唯一接入码和多个接入账号,数据能够分库分表存入到数据库中。
809协议也支持接收苏标主动安全报警数据,参见文章:
如何用部标jt809协议接收苏标主动安全报警和报警附件信息
下级平台用来转发数据给上级平台:
6.历史数据和报警数据分表设计
如需开发基于809数据接收系统的web平台,参见:基于部标jt/t809协议和Java Netty框架构建Gps位置监控平台
808的Java版本参见:基于Java Mina框架的部标808GPS服务器,
C#版的交通部809服务器设计请参考:基于JT/T809-2011的(已过检)GPS平台数据交换及转发服务器
如果用809协议接收第三方平台转发的数据,并开发web系统进行数据展现、报警提示、地图监控、电子围栏等功能,参见文章(C#和Java都有):基于部标Jt/T809协议和Java Netty框架构建Gps位置监控平台
(15752)