zoukankan      html  css  js  c++  java
  • 初识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");
    	}
    }
    

      

  • 相关阅读:
    Learn D3 入门文档:Interaction
    获取和设置浏览器缩放比
    PC禁止浏览器缩放
    CSS实用技巧(中)
    vsCode设置Bash启动 最新版本1.60默认终端配置修改
    SpringBoot集成itextpdf动态生成pdf并展示
    SpringBoot集成markdown实现文档管理
    SpringBoot实现用户统一管理与单点登陆
    采用Angular + NG-ZORRO + Ng Alain 框架搭建的 MES前端框架
    node调试
  • 原文地址:https://www.cnblogs.com/huangxiaohen/p/3950032.html
Copyright © 2011-2022 走看看