首页 > 代码库 > 初识java之Mina(一)

初识java之Mina(一)

Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持)操作的编程模型。

首先先写个简单的server,来实现异步的文件上传。

public class Main {	private static final int PORT = 8080;	public static void main(String[] args) throws Exception {		NioSocketAcceptor accept = new NioSocketAcceptor();		accept.getFilterChain().addLast("codec",				new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));		accept.getFilterChain().addLast("logging", new LoggingFilter());		accept.setHandler(new FileUploadHandler());		accept.bind(new InetSocketAddress(PORT));		System.out.println("upload  server started.");	}}

 

handle的处理就狠简单了。

public class FileUploadHandler extends IoHandlerAdapter {	private BufferedOutputStream out;	private int count;	private static final Log log = LogFactory.getLog(FileUploadHandler.class);	public void sessionOpened(IoSession session) throws Exception {		System.out.println("server open");	public void exceptionCaught(IoSession session, Throwable cause)			throws Exception {		System.out.println("exception");		session.close(true);		super.exceptionCaught(session, cause);	}	public void messageReceived(IoSession session, Object message) {		System.out.println("server received");		try {			if (message instanceof FileUploadRequest) {				FileUploadRequest request = (FileUploadRequest) message;				System.out.println(request.getFilename());				if (out == null) {					String [] array = request.getFilename().split("//");					System.out.println(array[1]);					out = new BufferedOutputStream(new FileOutputStream("D://"+array[1]));					out.write(request.getFileContent());				} else {					out.write(request.getFileContent());				}				count += request.getFileContent().length;			} else if (message instanceof String) {				if (((String) message).equals("finish")) {					System.out.println("size is " + count);					out.flush();					out.close();					out = null;					session.write("success");				}			}		} catch (Exception e) {			e.printStackTrace();		}	}	public void sessionClosed(IoSession session) throws Exception {		System.out.println("server session close");	}}

 

  

 

初识java之Mina(一)