一,前言:
在完成上篇文章《Mina入门:Java NIO框架Mina、Netty、Grizzly简介与对比》之后,我们现在可以正式切入Mina入门学习了。
二,搭建项目结构与解决项目依赖
本人使用Maven来管理项目的依赖。好了,废话也不多说,直接上pom.xml。这里主要是加入mina-core以及其依赖的SLF4J。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.androidwhy</groupId>
<artifactId>mina-helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mina-helloworld</name>
<url>http://www.androidwhy.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
这里需要注意一点的就是Mina与SLF4J版本的匹配,官方也有文档提到了,注意一下就是。
三,编写服务器
我们的mina版的HelloWorld的业务逻辑很简单,就是接收客户端的请求,并回应给客户端一个字符"Hello,I am Server!"就可以了。
MinaTimeServer的主代码如下。
package com.androidwhy.mina.helloworld.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MinaTimeServer {
private static final int PORT = 8888;
public static void main(String[] args) throws IOException {
// Create the acceptor
IoAcceptor acceptor = new NioSocketAcceptor();
// Add two filters : a logger and a codec
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
// Attach the business logic to the server
acceptor.setHandler( new HelloWorldServerHandler() );
// Configurate the buffer size and the iddle time
acceptor.getSessionConfig().setReadBufferSize( 2048 );
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
// And bind !
acceptor.bind( new InetSocketAddress(PORT) );
}
}
Handler代码如下:
package com.androidwhy.mina.helloworld.server;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class HelloWorldServerHandler extends IoHandlerAdapter
{
/**
* Trap exceptions.
*/
@Override
public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
{
cause.printStackTrace();
}
/**
* If the message is 'quit', we exit by closing the session. Otherwise,
* we return the message.
*/
@Override
public void messageReceived( IoSession session, Object message ) throws Exception
{
String str = message.toString();
if( str.trim().equalsIgnoreCase("quit") ) {
// "Quit" ? let's get out ...
session.close(true);
return;
}
System.out.println("Received message:"+str);
// Send the "Hello, I am Server!" back to the client
String helloWorld = "Hello, I am Server!";
session.write(helloWorld);
System.out.println("Message written...");
}
/**
* On idle, we just write a message on the console
*/
@Override
public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
{
System.out.println( "IDLE " + session.getIdleCount( status ));
}
}
你会发现,使用Mina写一个Server就是如此之简单!上面的MinaTimeServer主是建立一个监听在8888端口(建议使用大于1024的端口号,因为1024以下的是系统保留的)服务,并设置了一个日志filter与一个编码的filter;HelloWorldServerHandler对handler的各位状态进行了处理,在这里最为主要的就是override了messageReceived方法,并在其中处理我们的业务逻辑。
四,运行程序
到目前为止,我们只是写了一个Server,那程序怎么跑呢?客户端就暂时采用Telnet吧!
五,总结
我只想说一句:任何开源框架的入门都是如此的Easy,Mina也一样。
分享到:
相关推荐
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利...当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供)。
这个网上一个牛人写的mina入门知识, 里面有基础介绍和项目开发步骤。 入门还是不错的,写的挺详细。 我把项目也加进来了。
mina的入门例子
mina 基础的入门实例,使用maven+jdk1.7进行构建,使用客户端直接可以进行测试
ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门
apache-mina-2.0.16.zip
Mina2.0快速入门与源码剖析(个人经验文档)
mina的使用初步入门mina的使用初步入门mina的使用初步入门
mina 入门 教程
pache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性...
mina-filter-compression-2.0.7.jar,mina 过滤器jar包,核心包之一
NULL 博文链接:https://royal2xiaose.iteye.com/blog/1558322
中英文版的 pdf 均带有书签,方便读者朋友查阅。 mina_2.0_user_guide_cn.pdf 内容预览: 第一章:入门 第二章:基础知识 第三章:IO 服务 第四章:会话 第五章:过滤器 第六章:传输 第七章:事件处理器 第八章:...
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
MinaServer 学习使用mina框架 SocketServer.java为原生的serverSocket创建的socket服务器、实现与多个客户端socket实时通信; 由于随着客户端数量的增加;原生的serversocket不能很好的管理与各个客户端连接的socket...
米娜·纳金斯(Mina Nginx) 使用处理任务。 此gem提供了几个Mina任务: mina nginx:install # Install template config to host repo for easy overrides mina nginx:setup # Install config file to the server...
安装及使用将此行添加到您的应用程序的Gemfile中: gem 'mina-multistage' , require : false 然后执行:$ bundle 或将其自己安装为:$ gem install mina-multistage 在您的config/deploy.rb需要mina/multistage : ...