apache服务器是实现( )网络协议的,图解Apache Mina ——基于TCP/IP协议实现NIO服务

Apache MINA 是一个用于简化开发构建高性能、高可扩展的网络应用框架。通过JAVA NIO在各种传输协议(如:TCP/IP、UDP/IP)上提供抽象的事件驱动异步API

Apache MINA可以称为:NIO框架库、服务端客户端框架库、一个网络套接字库

特性

为各种传输协议提供统一API

提供类似servlet filter的过滤链路支持

可定制化线程模型

开箱即用的 SSL · TLS · StartTLS

超载保护和传输流量控制

易于集成(如:与Spring集成)

可平滑过渡到Netty

...

20191106162131089538.png

(Apache MINA在应用中的角色)

从图中可以看出,只需要关注与MINA的交互而复杂的网络层处理交由MINA来完成

Apache MINA架构

20191106162131237004.png

(总体架构)

采用三层架构:

I/O Service - 执行实际 I/O处理

I/O Filter Chain - 将字节过滤/转换为所需的数据结构,反之亦然

I/O Handler - 应用层实现逻辑的地方

所以创建一个基于Apache MINA的应用只需要

创建an I/O service - 选择合适的Acceptor或自定义

创建 a Filter Chain - 转换请求响应

创建 an I/O Handler - 处理不同的消息

20191106162131271185.png

(服务端架构)

20191106162131311226.png

(服务端流程示意)

20191106162131350290.png

(客户端架构)

案例分析

服务端

public static void main(String[] args) throwsIOException {//IoService

final IoAcceptor acceptor = newNioSocketAcceptor();//IoFilter

acceptor.getFilterChain().addLast("logger",newLoggingFilter());

acceptor.getFilterChain().addLast("codec",newProtocolCodecFilter(//ProtocolCodecFactory

new TextLineCodecFactory(Charset.forName("UTF-8"))));//IoHandler

acceptor.setHandler(newTimeServerHandler());//IoService

acceptor.getSessionConfig().setReadBufferSize(2048);

acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);

acceptor.bind(newInetSocketAddress(PORT));

LOGGER.info("服务端启动成功,端口:{}",PORT);

}

20191106162131395214.png

客户端

public static void main(String[] args) throwsInterruptedException {//IoConnector

final NioSocketConnector connector = newNioSocketConnector();

connector.setConnectTimeoutMillis(3*1000);//connector.getSessionConfig().setUseReadOperation(true);//IoFilter

connector.getFilterChain().addLast("codec",newProtocolCodecFilter(//ProtocolCodecFactory

newObjectSerializationCodecFactory()));

connector.getFilterChain().addLast("logger",newLoggingFilter());//IoHandler

connector.setHandler(newTcpClientHandler());

IoSession session= null;for(;;){try{//IoFuture

final ConnectFuture connectFuture = connector.connect(newInetSocketAddress(HOST, PORT));

connectFuture.awaitUninterruptibly();

session=connectFuture.getSession();break;

}catch(RuntimeIoException e){

System.err.println("failed connected");

e.printStackTrace();

Thread.sleep(5000);

}

session.getCloseFuture().awaitUninterruptibly();//IoProcessor

connector.dispose();

}

}

20191106162131456739.png

主要类图

20191106162131496780.png

附件

参考

说明

附件具标注各个类方法的具体实现,请注意查看

引用请注明出处

原文:https://www.cnblogs.com/imaikce/p/11805402.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值