`
bigboy菠萝的海
  • 浏览: 35508 次
社区版块
存档分类
最新评论

基于mina架构的JT/T808协议两种解码方式性能比较

阅读更多
方案一继承CumulativeProtocolDecoder,实现doDecode方法进行解码;
方案二继承ProtocolDecoder ,实现decode方法进行解码;
在一台普通pc机(默认配置的Eclipse中直接运行测试程序)上测试客户端2k并发,方案一35分钟勉强达到达到150W数量,方案二只用了32分钟就已经达到150W数量。

网关程序下载地址:
http://670624517.iteye.com/admin/blogs/2281396

方案一:

public class JTT808CodecDecoder  extends CumulativeProtocolDecoder {
	       ……(此处省略N行代码)



protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out)throws Exception {
		  boolean matched=false;
		  int start=in.position();
	      int limit=in.limit();
		  while (in.hasRemaining()) {
			    byte b=in.get();
			    if(!matched){
			    	if(b==JTT808Message.FLAG){
			    		 matched=true;
			    		 start=in.position()-1;
			    	}
			    	continue;
			    }
			    
			    if(b!=JTT808Message.FLAG) continue;
		
		    	int pos = in.position(); 
		    	try{
			    	if(in.hasRemaining()){
		            	b=in.get();
		            	in.position(start);
				    	in.limit(pos);
		            	if(b==JTT808Message.FLAG){
   		                 	 decode(in,out);
		            	}else{
		            		illegalMessage(in);
		            	}
		            }else{
		            	in.position(start);
				    	in.limit(pos);
		                decode(in,out);
		            }
		    	}catch(Exception e){
		    		illegalMessage(in);
		    		logger.error(e.getMessage(),e);
		    	}finally{
		    		in.limit(limit);
		    		in.position(pos);
		    	}
		    	return true;
	     }
		  
		 if(matched){
			 in.limit(limit);
			 in.position(start);
			 return false;
		 } 
		 
		 return true;
    }
	 

	private void decode(IoBuffer buf,ProtocolDecoderOutput out){
		 int size=buf.limit()-buf.position();
 		 byte[] bytes = new byte[size];
 		 buf.get(bytes,0, bytes.length);
 		 



  ……(此处省略N行代码)

}
  ……(此处省略N行代码)

}




方案二:


public class JTT808CodecDecoder implements ProtocolDecoder {
	
         ……(此处省略N行代码)

	//此解码方式性能更高
	public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out)throws Exception {
		  Context ctx = getContext(session);
		  boolean mark=false;
		  if(ctx.getBuf().position()>0){
			  if(ctx.getBuf().get(0)==JTT808Message.FLAG){
					 mark=true;
			  }else{
				  ctx.getBuf().clear(); 
			  }
		  }
		  while (in.hasRemaining()) {
			    byte b=in.get();
			    ctx.getBuf().put(b);	    
	            if(b!=JTT808Message.FLAG) continue;
	            if(mark){
            		if(in.hasRemaining()){
            			b=in.get();
            			if(b==JTT808Message.FLAG){
            				decode(ctx.getBuf(),out);
            			}else{
            				logger.error("illegal message:"+bytesToHexString(ctx.getBuf().array()));
            				out.write("-1");
            			}
            			ctx.getBuf().clear(); 
        				ctx.getBuf().put(b);
        				mark=true;
            		}else{
            			decode(ctx.getBuf(),out);
            			ctx.getBuf().clear();
            		}
	            }else{
	            	mark=true;  
	            }
	     }
    }
	
	private void decode(IoBuffer buf,ProtocolDecoderOutput out){
		int size=buf.position();
		buf.flip();
		byte[] bytes = new byte[size];
		buf.get(bytes);

                ……(此处省略N行代码)
        }
       ……(此处省略N行代码)
}

0
0
分享到:
评论
1 楼 xiaopeng187 2015-05-31  
最近也在研究这个东西 能留个联系方式吗

相关推荐

    demo.zip_808 协议_808-2011_JT/T808_JT/T808-2011_车载 JT 808

    车载终端网关采用mina/netty+spring架构,独立于其他应用,主要负责维护接入终端的tcp链接、上行以及下行消息的解码、编码、流量控制,黑白名单等安全控制,网关同时支持交通部JT/T808-2011、JT/T808-2013两个版本...

    java版斗地主源码-JT808:交通部808协议(JT/T808、JT/T809、JT/T1078、JT/T1257、苏标T/JSATL、J

    易联车联网网关中间件采用微内核架构,以netty/mina作为底层通讯架构,是一个基于JT/T808 2011《道路运输车辆卫星定位系统终端通信协议及数据格式》、JT/T808 2013《道路运输车辆卫星定位系统北斗兼容车载终端通信...

    基于 MINA 的 TLS/SSL NIO Socket 实现(二)

    本文将主要关注在Java中使用MINA来实现安全套接层(SSL)和传输层安全(TLS)协议,这两个协议是网络安全通信的基础,确保数据在网络中的加密传输。 首先,理解TLS/SSL的核心概念至关重要。它们都是为网络通信提供...

    基于JTT808协议的车辆监控系统架构方案

    1、网关应用采用mina+spring+ehcache框架,主要功能是接受终端的tcp/udp链接,解析终端的上行消息以及封装平台下发的下行消息,本网关应用已历经并通过多次交通部部标部标的检测,性能稳定;同时网关采用json消息与...

    基于mina架构的JTT808协议网关

    基于mina架构的JTT808协议演示版本程序,网关采用mina+spring+MQ/redis架构,简单配置application.properties中的MQ:jms.brokerurl=tcp://127.0.0.1:61616 需要正版可联系QQ:78772895

    基于mina架构的JTT808部标协议网关程序

    该版本基于mina架构的JTT808协议演示版本程序,网关采用mina+spring+MQ/redis架构,简单配置application.properties中的 MQ:jms.brokerurl=tcp://127.0.0.1:61616; 终端连接对应的端口:3005, 点击bin/目录下面...

    道路运输车辆卫星定位系统--协议补充(JT T808、809-2011)

    因此,这部分内容不包含任何有用的信息,我们无法从中得到关于“道路运输车辆卫星定位系统--协议补充(JT T808、809-2011)”的具体知识点。 不过,根据标题和描述中提供的信息,我们可以进行一些相关知识点的说明。...

    基于mina架构的JTT808部标协议网关

    基于mina架构的JTT808协议演示版本程序,网关采用mina+spring+MQ/redis架构,简单配置application.properties中的 MQ:jms.brokerurl=tcp://127.0.0.1:61616; 终端连接对应的端口:3005, 点击bin/目录下面的bin/...

    MINA 协议解码过滤器

    MINA(Java Multicast Network Application Framework)是Apache软件基金会开发的一个网络应用框架,主要用于构建高性能、高可用性的网络服务器。这个框架提供了丰富的网络通信API,支持多种协议,如TCP/IP、UDP/IP...

    mina自定义编解码器详解

    - 编解码器是mina中的核心组件,分为编码器(Encoder)和解码器(Decoder)两部分,分别处理数据的编码和解码过程。 - 编码器将应用对象转化为ByteBuffer,以便于网络传输;解码器则将接收到的ByteBuffer还原为...

    基于Mina架构的移动数据Socket Server和android iOS Client端工程代码及文档

    基于Mina架构开发的可配置的Socket Server,后台采用MySql数据库,可以独立app部署或Tomcat Servlet部署,包括Socket Server全部实现代码,后台MySql数据备份文件,Java测试代码,android端测试代码和iOS端测试代码...

    一种基于Mina状态机的高性能服务器的设计方法

    Mina 服务器设计方法基于状态机的高性能服务器设计方法 Mina 服务器设计方法是基于状态机的高性能服务器设计方法,旨在提高服务器的性能和可靠性。该方法使用 Mina 网络应用程序框架和有限状态机,对服务器的设计和...

    基于MINA构建简单高性能的NIO应用.pdf

    "基于MINA构建简单高性能的NIO应用.pdf" 这个标题指出,文档主要讨论如何使用MINA框架来构建一个基于非阻塞I/O (Non-blocking I/O, NIO) 的应用程序。MINA是一个开源的Java框架,专为网络通信设计,特别是高性能、高...

    mina自定义编码解码器

    Mina允许开发者构建基于TCP、UDP等传输协议的服务器端和客户端应用,而无需关注底层的Socket编程细节。本文将深入探讨如何在Mina中自定义编码解码器,这对于实现特定的网络通信协议至关重要。 首先,了解Mina的编码...

    交通部809协议源码(java开发,基于apache-mina框架)

    交通部809协议源码(java开发,基于apache-mina框架)。未全部实现功能,仅实现server端主链路,从链路未做,默认链路不加密,可满足常规接入实时车辆GPS定位等功能,需实现更多业务逻辑请自行丰富MsgCallBack类。 ...

    mina 多路分离解码

    《mina多路分离解码详解》 mina框架是Apache软件基金会的一个开源项目,它为Java开发者提供了一套高效、功能丰富的网络通信库,主要用于构建高性能的网络应用服务器,如TCP和UDP服务。在mina框架中,“多路分离解码...

    mina编解码示例

    mina编解码示例是基于Apache Mina框架的一个实践项目,主要展示了如何在Mina中进行数据的编码和解码操作。Apache Mina是一个高度可扩展的网络通信框架,广泛应用于开发高性能、高并发的网络应用程序,如TCP/IP和UDP...

    mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api,mina心跳

    mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api mina聊天 mina解码编码 mina协议开发 mina仿qq mina消息xml mina开发的在线聊天工具,mina仿qq功能,mina自定义协议,可以...

    基于MINA构建高性能的NIO应用

    ### 基于MINA构建高性能的NIO应用 #### 概述 MINA作为一款优秀的客户端/服务器架构下的Java服务器框架,凭借其强大的功能和灵活性,在开发高性能网络应用程序方面表现突出。本文将深入探讨MINA的核心概念、优势...

    给予mina 协议进行大数据传输

    标题中的“给予mina协议进行大数据传输”指的是一种基于Java的网络通信框架——Apache MINA(Model-View-Controller for Network Applications)。MINA是Apache软件基金会的一个项目,它提供了一个高度可扩展和高...

Global site tag (gtag.js) - Google Analytics