天天看點

mina架構和spring的整合使用

MinaServer類:

[java] view plain copy print ?

  1. import java.net.InetSocketAddress;  
  2. import javax.servlet.ServletContextEvent;  
  3. import javax.servlet.ServletContextListener;  
  4. import javax.servlet.http.HttpSessionEvent;  
  5. import javax.servlet.http.HttpSessionListener;  
  6. import org.apache.mina.core.session.IdleStatus;  
  7. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  8. import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;  
  9. import org.apache.mina.filter.executor.ExecutorFilter;  
  10. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  
  11. import com.utils.LogUtil;  
  12. public class MinaServer implements ServletContextListener, HttpSessionListener {  
  13.     private static NioSocketAcceptor acceptor;  
  14.     private static final int port = 9999;  
  15.     private static final LogUtil logUtil = LogUtil.getLogUtil(MinaServer.class);  
  16.     public void sessionCreated(HttpSessionEvent se) {  
  17.     }  
  18.     public void sessionDestroyed(HttpSessionEvent se) {  
  19.     }  
  20.     // 停止MINA服務  
  21.     public void contextDestroyed(ServletContextEvent sce) {  
  22.         try {  
  23.             MinaServer.acceptor.unbind();  
  24.             MinaServer.acceptor.dispose();  
  25.             logUtil.customLog("Mina服務停止...");  
  26.         } catch (Exception e) {  
  27.             logUtil.customLog(e);  
  28.         }  
  29.     }  
  30.     // 啟動MINA服務  
  31.     public void contextInitialized(ServletContextEvent sce) {  
  32.         try {  
  33.             // 建立一個非阻塞的server端的Socket  
  34.             acceptor = new NioSocketAcceptor();  
  35.             // 設定過濾器  
  36.             acceptor.getFilterChain().addLast(  
  37.                     "serverCodec",  
  38.                     new ProtocolCodecFilter(  
  39.                             new ObjectSerializationCodecFactory()));  
  40.             acceptor.getFilterChain().addLast("ServerFilter",  
  41.                     new ExecutorFilter());  
  42.             // 設定讀取資料的緩沖區大小  
  43.             acceptor.getSessionConfig().setReadBufferSize(1024*102400);  
  44.             // 讀寫通道10秒内無操作進入空閑狀态  
  45.             acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);  
  46.             // 添加邏輯處理器  
  47.             acceptor.setHandler(new MinaServerHandler());  
  48.             // 綁定端口  
  49.             try {  
  50.                 acceptor.bind(new InetSocketAddress(port));  
  51.             } catch (Exception e) {  
  52.             }  
  53.             logUtil.customLog("服務端啟動成功...     端口号為:" + port);  
  54.         } catch (Exception e) {  
  55.             logUtil.customLog("服務端啟動異常....");  
  56.         }  
  57.     }  
  58. }  
import java.net.InetSocketAddress;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

import com.utils.LogUtil;

public class MinaServer implements ServletContextListener, HttpSessionListener {
	private static NioSocketAcceptor acceptor;
	private static final int port = 9999;
	private static final LogUtil logUtil = LogUtil.getLogUtil(MinaServer.class);

	public void sessionCreated(HttpSessionEvent se) {

	}

	public void sessionDestroyed(HttpSessionEvent se) {

	}

	// 停止MINA服務
	public void contextDestroyed(ServletContextEvent sce) {
		try {
			MinaServer.acceptor.unbind();
			MinaServer.acceptor.dispose();
			logUtil.customLog("Mina服務停止...");
		} catch (Exception e) {
			logUtil.customLog(e);
		}
	}

	// 啟動MINA服務
	public void contextInitialized(ServletContextEvent sce) {
		try {
			// 建立一個非阻塞的server端的Socket
			acceptor = new NioSocketAcceptor();
			// 設定過濾器
			acceptor.getFilterChain().addLast(
					"serverCodec",
					new ProtocolCodecFilter(
							new ObjectSerializationCodecFactory()));
			acceptor.getFilterChain().addLast("ServerFilter",
					new ExecutorFilter());
			// 設定讀取資料的緩沖區大小
			acceptor.getSessionConfig().setReadBufferSize(1024*102400);
			// 讀寫通道10秒内無操作進入空閑狀态
			acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
			// 添加邏輯處理器
			acceptor.setHandler(new MinaServerHandler());
			// 綁定端口
			try {
				acceptor.bind(new InetSocketAddress(port));
			} catch (Exception e) {
			}
			logUtil.customLog("服務端啟動成功...     端口号為:" + port);
		} catch (Exception e) {
			logUtil.customLog("服務端啟動異常....");
		}

	}

}
           

web.xml配置監聽器:

[html] view plain copy print ?

  1. <listener>  
  2.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  3. </listener>  
  4. <listener>  
  5.     <listener-class>com.telek.mina.server.MinaServer</listener-class>  
  6. </listener>  

繼續閱讀