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"); } }
时间: 2024-10-13 15:55:40