1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > php 客户端 mina Apache Mina快速入门

php 客户端 mina Apache Mina快速入门

时间:2021-06-24 02:40:41

相关推荐

php 客户端 mina Apache Mina快速入门

Mina是什么

Mina是一个基于NIO的网络框架,使用它编写程序时,可以专注于业务处理,而不用过于关心IO操作。不论应用程序采用什么协议(TCP、UDP)或者其它的,Mina提供了一套公用的接口,来支持这些协议。目前可以处理的协议有:HTTP, XML, TCP, LDAP, DHCP, NTP, DNS, XMPP, SSH, FTP…。从这一点来说,Mina不仅仅是一个基于NIO的框架,更是一个网络层协议的实现。

MINA 设计架构

1、Mina 整体架构

开发程序时,只需要在Mina的基础上,使用Mina的API就可以了。

2、Mina各个组件

在使用Mina时,可以在Server端使用,也可以在Client端使用。并且它们都使用了同样的架构。

上面这个图说明了Mina的处理大致流程。从这个图上也可以看出,大致包括了3个部分:

·IoService:执行实际的IO操作。

·IoFilter Chain:将数据进行过滤或者转换为期望的数据结构,反之亦然。

·IoHandler:实际的业务操作。

所以如果想要使用Mina编写程序,只需要下列3步即可:

·创建IoService。

·添加IoFilter到FilterChain

·编写处理业务逻辑的IoHandler

3、server端示例

定义一个IOHandler:

package com.fjn.frame.mina.timetest;

import java.util.Date;

import org.apache.mina.core.service.IoHandlerAdapter;

import org.apache.mina.core.session.IdleStatus;

import org.apache.mina.core.session.IoSession;

public class TimeServerHandler extends IoHandlerAdapter {

@Override

public void exceptionCaught(IoSession session, Throwable cause)

throws Exception {

cause.printStackTrace();

}

@SuppressWarnings("deprecation")

@Override

public void messageReceived(IoSession session, Object message)

throws Exception {

String str = message.toString();

if (str.trim().equalsIgnoreCase("quit")) {

session.close();

return;

}

Date date = new Date();

session.write(date.toString());

System.out.println("Message written...");

}

@Override

public void sessionIdle(IoSession session, IdleStatus status)

throws Exception {

System.out.println("IDLE " + session.getIdleCount(status));

}

}

接下来就是使用Mina了:

package com.fjn.frame.mina.timetest;

import java.io.IOException;

import .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 = 9123;

public static void main(String[] args) throws IOException {

// 创建IoService

IoAcceptor acceptor = new NioSocketAcceptor();

// 添加Filter:

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

acceptor.getFilterChain().addLast(

"codec",

new ProtocolCodecFilter(new TextLineCodecFactory(Charset

.forName("UTF-8"))));

// 设置Handler

acceptor.setHandler(new TimeServerHandler());

// 其它配置

acceptor.getSessionConfig().setReadBufferSize(2048);

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

// 启动服务

acceptor.bind(new InetSocketAddress(PORT));

}

}

运行上面程序后,可以在cmd(或者使用终端)上使用下面命令测试。

telnet 127.0.0.1 9123

4、IoService说明

编写网络程序,一般都分为Server/Clinet。Mina为Server端程序提供的IoService实现是IoAcceptor,为客户端提供的实现是IoConnector。

Server端实现:

Clint端实现:

5、IoSession说明

Session,这个词都不陌生。在Web开发中有Session的概念,在Hibernate中有Session的概念。Session就是对连接会话的封装,存储一些状态信息。同样在Mina中也有Session的概念。

在Mina会为每一个连接创建session,并存储在内存中,直到与Client之间连接断开。

UDP协议是无连接的,这样成立吗?在Java NIO的API中有DatagramChannel、SocketChannel。所以Mina的NioSession中,就将封装了Channel。

6、IoFilter说明

过滤器的作用,以及它的运行原理,开发过Web应用程序的人应该都是知道的。IoFilter的原理与Web应用中的Filter是一样的,这里就不在赘述。

使用过滤器可以做哪些事情呢?

1、 日志记录

2、 根据协议对数据进行编码、解码。

3、 SSL处理

上面示例中的TextLine协议过滤器,就是将用户请求数据解码成一行一行的数据。

目前已有过滤器有:

当然了,也可自定义Filter了。

7、IoHandler说明

IoHandler是在最后一个Filter中调用的。主要实现的方法是messageReceived。

就是写你接收到数据后要处理的业务逻辑。

更多帮助:/mina-project/quick-start-guide.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。