apache mina

最近项目用到mina,所以自学了一下。趁热打铁看,记一下。mina其实我自己理解就是一个网络层的框架。他对原有的socket进行了封装,变得更加灵活,在我看来变得更加方便。最重要的是:他是异步通信的。也就是说他不会存在因为等待要接收的消息而损失资源。下面是写的服务器端的代码(PORT=9080自己定义的):

IoAcceptor acceptor = new NioSocketAcceptor();//建立接收端 也就是所謂的server端
		MinaHandler mh = new MinaHandler();
		DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
		chain.addLast("logger", new LoggingFilter());//加入一个日志过滤器,记录日志
		chain.addLast("codec", new ProtocolCodecFilter(
				new TextLineCodecFactory(Charset.forName("UTF-8"))));//加入编码格式过滤器,设定为utf-8
		IoSessionConfig dcfg = acceptor.getSessionConfig();//定义session的设置 
		dcfg.setReadBufferSize(2048);//临时读取的缓冲区大小 我是这么理解的
		acceptor.setHandler(mh);//设定业务处理的对象 大概可以这么理解 不是很准确
		acceptor.bind(new InetSocketAddress(PORT));//选择要监控的服务器 因为不监控也就没有触发方法这么一说了

然后是客户端:

	IoConnector connector = new NioSocketConnector();//建立連接端
		DefaultIoFilterChainBuilder chain = connector.getFilterChain();
		chain.addLast("logger", new LoggingFilter());//加入一个日志过滤器,记录日志
		chain.addLast("codec", new ProtocolCodecFilter(
				new TextLineCodecFactory(Charset.forName("UTF-8"))));//加入编码格式过滤器,设定为utf-8
		ClientHandler ch = new ClientHandler();//自己定义的类 实现八种方法。
		connector.setHandler(ch);//设定业务处理的对象 大概可以这么理解 不是很准确
		ConnectFuture connFuture = connector.connect(new InetSocketAddress(
				"localhost", 9089));//链接服务器  
		connFuture.awaitUninterruptibly();//线程等待,直到被唤醒
		IoSession session = connFuture.getSession();

		session.write("dddddd");//发送需要发送的内容
		session.getCloseFuture().awaitUninterruptibly();
		connector.dispose();



你可能感兴趣的:(apache,线程,通信,网络,异步,Mina)