开发者社区> chszs> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Apache Mina开发手册

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39525717 Apache Mina开发手册 作者:chszs,转载需注明。
+关注继续查看
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39525717

Apache Mina开发手册

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

一、介绍

Apache Mina是一个网络应用框架,简化用户开发高性能、高可扩展性的网络应用程序的难度。Mina提供了一个抽象的事件驱动的异步API,通过Java NIO实现各种传输协议如TCP/IP和UDP/IP。


Apache Mina经常用作:

1)NIO框架库

2)客户端/服务器通信框架库

3)网络Socket通信库

 

Apache Mina还伴随有不少子项目:

1)Asyncweb

构建于Apache Mina异步框架之上的HTTP服务器

2)FtpServer

一个FTP服务器

3)SSHd

一个Java库,支持SSHH协议

4)Vysper

一个XMPP服务器


二、Apache Mina下载

下载最新的Mina v2.0.8版

地址见:http://mina.apache.org/mina-project/downloads.html


三、用Mina开发时间服务器

说明一下,其实是基于官方的例子,略作了修改,因为发现官方的例子太陈旧,甚至包含了deprecated的方法。

 

1、先决条件

Apache Mina 2.0.8 Core

JDK 7

SLF4J+LOGBACK

 

2、项目依赖包

mina-core-2.0.8.jar

slf4j-api-1.6.6.jar



3、编写基于Mina的Time服务器

package ch.chiqms.server;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
 
importorg.apache.mina.core.service.IoAcceptor;
importorg.apache.mina.core.session.IdleStatus;
importorg.apache.mina.filter.codec.ProtocolCodecFilter;
importorg.apache.mina.filter.codec.textline.TextLineCodecFactory;
importorg.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
 
public class MinaTimeServer {
         privatestatic final int PORT = 9123;
         publicstatic void main(String[] args){
                   //监听连接的对象
                   IoAcceptoracceptor = new NioSocketAcceptor();
                  
                   //配置过滤器
                   //logger过滤器会输出所有的信息,例如新创建的会话、消息的接收、消息的发送、会话的关闭
                   //codec过滤器会转换二进制活协议规定的数据为消息对象,这里是处理基于文本的消息
                   acceptor.getFilterChain().addLast("logger",new LoggingFilter());
                   acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(
                                     newTextLineCodecFactory(Charset.forName("UTF-8"))));
                 
                   //
                   acceptor.setHandler(newTimeServerHandler());
                  
                   //设置输入缓冲区的大小和会话的IDLE熟悉
                   acceptor.getSessionConfig().setReadBufferSize(2048);
                   acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);
                  
                   try{
                            acceptor.bind(newInetSocketAddress(PORT));
                   }catch (IOException e) {
                            e.printStackTrace();
                   }
         }
}

4、编写Time服务的Handler

package ch.chiqms.server;
 
import java.text.SimpleDateFormat;
import java.util.Calendar;
 
import org.apache.mina.core.service.IoHandlerAdapter;
importorg.apache.mina.core.session.IdleStatus;
importorg.apache.mina.core.session.IoSession;
 
public class TimeServerHandler extendsIoHandlerAdapter {
 
         @Override
         publicvoid exceptionCaught(IoSession session, Throwable cause)
                            throwsException {
                   cause.printStackTrace();
         }
 
         @Override
         publicvoid messageReceived(IoSession session, Object message) throws Exception {
                   Stringstr = message.toString();
                   if(str.trim().equalsIgnoreCase("quit")){
                            session.close(true);
                            return;
                   }
                   Calendartime = Calendar.getInstance();
                   SimpleDateFormatdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                   session.write(df.format(time.getTime()));
                   System.out.println("TimeMessage written...");
         }
 
         @Override
         publicvoid sessionIdle(IoSession session, IdleStatus status) throws Exception {
                   System.out.println("IDLE"+session.getIdleCount(status));
         }
 
}

5、运行MinaTimeServer

在命令行输入telnet 127.0.0.1 9123



服务器端的输出也可以看到:

SLF4J: Failed to load class"org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP)logger implementation
SLF4J: Seehttp://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Time Message written...
Time Message written...
Time Message written...


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
重磅!Apache Flink 1.11 功能前瞻抢先看!
Flink 1.11 版本即将正式宣告发布!为满足大家的好奇与期待,我们邀请 Flink 核心开发者对 1.11 版本的功能特性进行解读与分享。Flink 1.11 在 1.10 的基础上对许多方面进行了完善和改进,并致力于进一步提高 Flink 的可用性及性能。
16643 0
Apache Flink 零基础入门(一):基础概念解析
本文是根据 Apache Flink 基础篇系列直播整理而成,由 Apache Flink PMC 戴资力与阿里巴巴高级产品专家陈守元共同分享。Apache Flink 系列入门教程每周更新一期,持续推送。
6648 0
即将发版!Apache Flink 1.9 版本有哪些新特性?
文整理自开源大数据专场中阿里巴巴高级技术专家杨克特(鲁尼)先生的精彩演讲,主要讲解了Apache Flink过去和现在的发展情况,同时分享了对Apache Flink未来发展方向的理解。
13927 0
Apache Flink 1.9.0 为什么将支持 Python API ?
众所周知,Apache Flink(以下简称 Flink)的 Runtime 是用 Java 编写的,而即将发布的 Apache Flink 1.9.0 版本则会开启新的 ML 接口和新的 flink-python 模块,Flink 为什么要增加对 Python 的支持,想必大家一定好奇。
3450 0
一文读懂Apache Flink发展史
本文整理自开源大数据专场中阿里巴巴高级技术专家杨克特(鲁尼)先生的精彩演讲,主要讲解了Apache Flink过去和现在的发展情况,同时分享了对Apache Flink未来发展方向的理解。
3193 0
权威解读:阿里云实时计算究竟对Apache Flink™️做了哪些‘改造’?
基于Apache Flink™️在阿里巴巴搭建的平台于2016年正式上线,并从阿里巴巴的搜索和推荐这两大场景开始实现。为了将Apache Flink™️在阿里巴巴真正运行起来,阿里巴巴实时计算团队做了大量的优化,将产品命名为流计算,今年8月已正式更名为实时计算。
1305 0
Apache Flink中的广播状态实用指南
自版本1.5.0以来,ApacheFlink提供了一种新的状态类型,称为广播状态(Broadcast State)。在本文中,我们会解释什么是广播状态,并通过一个例子,演示如何将其应用于一个用来评估基于事件流的动态模式的应用程序。
3589 0
回顾 | Apache Flink 1.9 版本新特性强势预告!(内含PPT下载链接)
6月29日,Apache Flink Meetup 北京站圆满落幕,Apache Flink 1.9 版本是自 Flink 1.0 之后变化最大的版本,社区对 Flink 进行大量重构并且加入了很多新 Feature。此次 Meetup 重点解读 Flink 1.9 版本新特性。
2008 0
原理解析 | 深入了解 Apache Flink 的网络协议栈
本文将首先介绍 Flink 暴露给流算子(Stream operator)的高层抽象,然后详细介绍 Flink 网络协议栈的物理实现和各种优化、优化的效果以及 Flink 在吞吐量和延迟之间的权衡。
2052 0
原理解析 | Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理
1. Apache Flink 应用程序中的 Exactly-Once 语义 2. Flink 应用程序端到端的 Exactly-Once 语义 3. 示例 Flink 应用程序启动预提交阶段 4. 在 Flink 中实现两阶段提交 Operator 5. 总结
2728 0
+关注
841
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载