方案一继承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行代码)
}
分享到:
相关推荐
车载终端网关采用mina/netty+spring架构,独立于其他应用,主要负责维护接入终端的tcp链接、上行以及下行消息的解码、编码、流量控制,黑白名单等安全控制,网关同时支持交通部JT/T808-2011、JT/T808-2013两个版本...
易联车联网网关中间件采用微内核架构,以netty/mina作为底层通讯架构,是一个基于JT/T808 2011《道路运输车辆卫星定位系统终端通信协议及数据格式》、JT/T808 2013《道路运输车辆卫星定位系统北斗兼容车载终端通信...
本文将主要关注在Java中使用MINA来实现安全套接层(SSL)和传输层安全(TLS)协议,这两个协议是网络安全通信的基础,确保数据在网络中的加密传输。 首先,理解TLS/SSL的核心概念至关重要。它们都是为网络通信提供...
1、网关应用采用mina+spring+ehcache框架,主要功能是接受终端的tcp/udp链接,解析终端的上行消息以及封装平台下发的下行消息,本网关应用已历经并通过多次交通部部标部标的检测,性能稳定;同时网关采用json消息与...
基于mina架构的JTT808协议演示版本程序,网关采用mina+spring+MQ/redis架构,简单配置application.properties中的MQ:jms.brokerurl=tcp://127.0.0.1:61616 需要正版可联系QQ:78772895
该版本基于mina架构的JTT808协议演示版本程序,网关采用mina+spring+MQ/redis架构,简单配置application.properties中的 MQ:jms.brokerurl=tcp://127.0.0.1:61616; 终端连接对应的端口:3005, 点击bin/目录下面...
因此,这部分内容不包含任何有用的信息,我们无法从中得到关于“道路运输车辆卫星定位系统--协议补充(JT T808、809-2011)”的具体知识点。 不过,根据标题和描述中提供的信息,我们可以进行一些相关知识点的说明。...
基于mina架构的JTT808协议演示版本程序,网关采用mina+spring+MQ/redis架构,简单配置application.properties中的 MQ:jms.brokerurl=tcp://127.0.0.1:61616; 终端连接对应的端口:3005, 点击bin/目录下面的bin/...
MINA(Java Multicast Network Application Framework)是Apache软件基金会开发的一个网络应用框架,主要用于构建高性能、高可用性的网络服务器。这个框架提供了丰富的网络通信API,支持多种协议,如TCP/IP、UDP/IP...
- 编解码器是mina中的核心组件,分为编码器(Encoder)和解码器(Decoder)两部分,分别处理数据的编码和解码过程。 - 编码器将应用对象转化为ByteBuffer,以便于网络传输;解码器则将接收到的ByteBuffer还原为...
基于Mina架构开发的可配置的Socket Server,后台采用MySql数据库,可以独立app部署或Tomcat Servlet部署,包括Socket Server全部实现代码,后台MySql数据备份文件,Java测试代码,android端测试代码和iOS端测试代码...
Mina 服务器设计方法基于状态机的高性能服务器设计方法 Mina 服务器设计方法是基于状态机的高性能服务器设计方法,旨在提高服务器的性能和可靠性。该方法使用 Mina 网络应用程序框架和有限状态机,对服务器的设计和...
"基于MINA构建简单高性能的NIO应用.pdf" 这个标题指出,文档主要讨论如何使用MINA框架来构建一个基于非阻塞I/O (Non-blocking I/O, NIO) 的应用程序。MINA是一个开源的Java框架,专为网络通信设计,特别是高性能、高...
Mina允许开发者构建基于TCP、UDP等传输协议的服务器端和客户端应用,而无需关注底层的Socket编程细节。本文将深入探讨如何在Mina中自定义编码解码器,这对于实现特定的网络通信协议至关重要。 首先,了解Mina的编码...
交通部809协议源码(java开发,基于apache-mina框架)。未全部实现功能,仅实现server端主链路,从链路未做,默认链路不加密,可满足常规接入实时车辆GPS定位等功能,需实现更多业务逻辑请自行丰富MsgCallBack类。 ...
《mina多路分离解码详解》 mina框架是Apache软件基金会的一个开源项目,它为Java开发者提供了一套高效、功能丰富的网络通信库,主要用于构建高性能的网络应用服务器,如TCP和UDP服务。在mina框架中,“多路分离解码...
mina编解码示例是基于Apache Mina框架的一个实践项目,主要展示了如何在Mina中进行数据的编码和解码操作。Apache Mina是一个高度可扩展的网络通信框架,广泛应用于开发高性能、高并发的网络应用程序,如TCP/IP和UDP...
mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api mina聊天 mina解码编码 mina协议开发 mina仿qq mina消息xml mina开发的在线聊天工具,mina仿qq功能,mina自定义协议,可以...
### 基于MINA构建高性能的NIO应用 #### 概述 MINA作为一款优秀的客户端/服务器架构下的Java服务器框架,凭借其强大的功能和灵活性,在开发高性能网络应用程序方面表现突出。本文将深入探讨MINA的核心概念、优势...
标题中的“给予mina协议进行大数据传输”指的是一种基于Java的网络通信框架——Apache MINA(Model-View-Controller for Network Applications)。MINA是Apache软件基金会的一个项目,它提供了一个高度可扩展和高...