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("http://");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");}}
新聞熱點
疑難解答