1.为什么要用Apache Mina框架

ApacheMina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVANIO 作为底层支持)操作的编程模型。

2.ApacheMina框架使用

Mina的执行流程:

> IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。

> IoProcessor:这个接口在另一个线程上,负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService与IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在IoService 上的过滤器,并在过滤器链之后调用IoHandler。

>IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write方向)与解码(read 方向)等功能,其中数据的encode 与decode是最为重要的、也是你在使用Mina 时最主要关注的地方。

>IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。

3.ApacheMina框架实例

该实例是WIFI云管理平台的实际运用,主要实现通过和WIFI保持长连接管理WIFI,贴出部分代码:

>服务器端UDPDispatcher.java

public class UDPDispatcher extendsHttpServlet implements ServletContextListener{

private static final int PORT =20000;

/** 30秒后超时 */

private static final int IDELTIMEOUT =30;

private static final longserialVersionUID = -4384594559203991221L;

@Override

public voidcontextInitialized(ServletContextEvent sce) {

NioDatagramAcceptor acceptor = newNioDatagramAcceptor();// 创建一个UDP的接收器

acceptor.setHandler(newUDPHandler());// 设置接收器的处理程序

Executor threadPool = newOrderedThreadPoolExecutor(100);// 建立线程池

acceptor.getFilterChain().addLast("exector",newExecutorFilter(threadPool));

acceptor.getFilterChain().addLast("logger",new LoggingFilter());

/*******心跳请求设置 begin*********/

KeepAliveMessageFactoryheartBeatFactory = new KeepAliveMessageFactoryImpl();

KeepAliveFilter heartBeat = newKeepAliveFilter(heartBeatFactory,

IdleStatus.BOTH_IDLE,KeepAliveRequestTimeoutHandler.CLOSE);

//设置是否forward到下一个filter

heartBeat.setRequestTimeoutHandler(newKeepAliveRequestTimeoutHandlerImpl());

heartBeat.setForwardEvent(true);

//设置心跳频率

heartBeat.setRequestInterval(20);

heartBeat.setRequestTimeout(60);

acceptor.getFilterChain().addLast("heartbeat",heartBeat);

/*******心跳请求设置 end  *********/

DatagramSessionConfig dcfg =acceptor.getSessionConfig();// 建立连接的配置文件

dcfg.setReadBufferSize(4096);// 设置接收最大字节默认2048

dcfg.setReceiveBufferSize(1024);//设置输入缓冲区的大小

dcfg.setSendBufferSize(1024);// 设置输出缓冲区的大小

dcfg.setReuseAddress(true);// 设置每一个非主监听连接的端口可以重用

dcfg.setIdleTime(IdleStatus.BOTH_IDLE,IDELTIMEOUT);

try {

// 绑定端口

acceptor.bind(newInetSocketAddress(UDPConfigUtil.getHost(),PORT));

} catch (IOException e) {

// TODO Auto-generatedcatch block

e.printStackTrace();

}

}

@Override

public voidcontextDestroyed(ServletContextEvent sce) {

// TODO Auto-generated method stub

}

}

>心跳机制处理KeepAliveMessageFactoryImpl.java

public void messageSent(IoSessionsession, Object message) throws Exception {

}

@Override

public void exceptionCaught(IoSessionsession, Throwable cause)

throws Exception {

logger.error(cause);

session.close(true);

}

@Override

public voidmessageReceived(IoSessionsession, Object message) throws Exception {

logger.info("messageReceived");

if (message instanceof IoBuffer) {

IoBuffer buffer = (IoBuffer)message;

UDPRequestServer controller =UDPRequestServer.getInstance();

IoBuffer buffer1 =controller.dealRequest(buffer);

session.write(buffer1);

}

}

}

>业务逻辑处理UDPHandler.java

publicclass UDPHandler extends IoHandlerAdapter {

private final Logger logger =Logger.getLogger(this.getClass());

@Override

public void messageSent(IoSessionsession, Object message) throws Exception {

}

@Override

public void exceptionCaught(IoSessionsession, Throwable cause)

throws Exception {

logger.error(cause);

session.close(true);

}

@Override

public void messageReceived(IoSessionsession, Object message) throws Exception {

logger.info("messageReceived");

if (message instanceof IoBuffer) {

IoBuffer buffer = (IoBuffer) message;

UDPRequestServer controller = UDPRequestServer.getInstance();

IoBuffer buffer1 =controller.dealRequest(buffer);

session.write(buffer1);

}

}

}

注意点:

>心跳机制:

(1)客户端会定时发送心跳请求(注意定时时间必须小于,服务器端的IDLE监控时间),同时需要监听心跳反馈,以此来判断是否与服务器丢失连接。对于服务器的心跳请求不给与反馈。

(2)心跳情况在60秒之内

(3)客户端和服务端同时都需要设置心跳请求

java mina框架实例_Apache Mina框架实践相关推荐

  1. java mina 长连接_apache mina 长连接

    apache mina  是较为流行的基于NIO的TCP/IP网络框架,她拥有高性能,以及高的实用性. 可以用于网页游戏服务器,手机游戏服务器.也可作为推送服务器使用. 版本:2.0.x Socket ...

  2. java shiro登录实例_Shiro安全框架入门篇(登录验证实例详解与源码)

    转载自http://blog.csdn.net/u013142781 一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和J ...

  3. mina java 1.6 版本_Apache MINA学习

    1.准备工作 mina官方下载地址:http://mina.apache.org/downloads.html,这里使用的版本是apache-mina-2.0.4-bin.zip. slf4j官方下载 ...

  4. java项目开发实例spring boot框架实现的理财记账财务管理系统

  5. appiumpython框架实例_Appium+python 框架 (二)

    前言 之前已经发过一个,许多人给提了很宝贵的意见,根据大家的意见和自己的一点思考,对原来的框架进行了一点修改,这里给大家分享一下,还是请各位看完后多多提意见. 结构 大体的结构没有太大的变化,这里附上 ...

  6. Java NIO 通信框架在电信领域的实践

    点击上方↑↑↑"微服务蜂巢"关注我们 1. 华为电信软件技术架构演进 1.1. 电信软件 从广义上看电信软件的范围非常广,细分实际可以分为两大类:系统软件和业务应用软件. 系统软件 ...

  7. Java NIO通信框架在电信领域的实践

    1. 华为电信软件技术架构演进 1.1. 电信软件 从广义上看电信软件的范围非常广,细分实际可以分为两大类:系统软件和业务应用软件. 系统软件包括路由器底层的信令机软件.手机操作系统等,业务应用软件主 ...

  8. Dubbo3.0|阿里巴巴服务框架三位一体的选择与实践

    作者|泮圣伟.董建凯 服务框架就像铁路的铁轨一样,是互通的基础,只有解决了服务框架的互通,才有可能完成更高层的业务互通,所以用相同的标准统一,合二为一并共建新一代的服务框架是必然趋势. Dubbo3. ...

  9. java mina spring_Mina: SpringBoot 集成 MINA 项目

    MINA 一.概述 ​Apache MINA是一个网络通信应用框架,可帮助用户轻松开发高性能和高可扩展性的网络应用程序. 它通过Java NIO在各种传输(如TCP / IP和UDP / IP)上提供 ...

最新文章

  1. Django博客系统(写博客页面展示)
  2. 8086汇编学习笔记9-中断
  3. 如何保障消息中间件 100% 消息投递成功?如何保证消息幂等性?
  4. Jenkins file一行代码部署.NET程序到K8S
  5. 交际过程的两个基本环节_男女相处,若不介意这些“小动作”,基本可以确定“关系暧昧”...
  6. sql server 锁定_关于锁定SQL Server的全部
  7. Python基础教程和入门教程
  8. 在c#使用Windows IOCP(完成端口)编程研究
  9. Python面向对象成员修饰符
  10. 如何用计算机计算微积分,高数从此不用怕?一键计算微积分的神App
  11. Android 获取当前地理位置信息
  12. (附源码)Python学生兼职平台系统 毕业设计 160938
  13. cubieboard mysql_【Linux】【笔记】Cubieboard开发板Debian系统+SAMBA共享+远程迅雷Xware+Nginx+PH......
  14. 怎么样设计好看的logo?教你6步学会logo设计
  15. Landesk桌面管理之服务器管理篇
  16. CNN卷积核计算原理
  17. c语言zip 库,c语言调用libzip库遍历zip文件
  18. 从代理模式再出发!Proxy.newProxyInstance的秘密
  19. 2022刘仲文程聪孙迎迎--用Jensen不等式证明相对熵的非负性
  20. Android N音频播放延迟

热门文章

  1. 项目时间管理的几种方法
  2. 关于EDP触摸屏使用笔记
  3. GOOGLE HACKING 系列文章
  4. d3js(D3JS 不规则图形)
  5. 区块链数据的价值体现方式
  6. 存储介质(2)FLASH
  7. java微信红包开发_java写的伪微信红包功能示例代码
  8. usb root hub的启用和设备的识别(1)
  9. VVC/H.266代码阅读(VTM8.0)(三. Slice到CTU的处理 )
  10. python运动会报名_【python ** 运算符】**小学第四届田径运动会开幕词