Mina框架及介面開發
Mina是NIO實現的一個架構,可以通過它快速開發網路通訊,中介軟體等服務端程式。
IOService介面:描述服務端和客戶端介面,子類是connector和Acceptor分別用於描述客戶端和服務端。
IOproceser 多執行緒環境來處理我們的連線請求流程,ioFilter提供資料的過濾工作,包括編解碼,日誌等資訊過濾。
Handler就是我們的業務物件,自定義Handler需實現IOHandlerAcceptor。
IOsession描述的是客戶端和服務端連線的描述,常用於描述傳送和接收資料。
總結:客戶端流程 IOconnector->IOProcessor->IOFilter->Handler
服務端流程 IOAcceptor->IOProcessor->IOFilter->Handler
server端:
package com.zjl.demo.mina;
import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MinaServer {
public void init( ) thows Exception {
SocketAcceptor acceptor = new NioSocketAcceptor(Runtime.getRuntime( ).availableProcessors( ) +1);
DefaultIofilterChainBuilder chain = acceptor.getFilterChain( );
chain.addLast("codec",new ProtocolCodecFilter(
new TextLineCodecFactory( )));
acceptor.setHandler(new MinaServerHandler( ) );
acceptor.bind(new InetSocketAddress(8300));
System.out.printIn("繫結埠8300");
}
public MinaServer( ) throws Exception {
init( );
}
public static void main(String[ ] args) throws Exception {
new MinaServer( );
System.out.printIn(Mina伺服器開啟“);
}
}
服務端訊息處理類:
package com.zjl.demo.mina;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class MinaServerHanlder extens IoHandlerAdapter {
@Override
public void messageReceived(IoSession session, Object message)
thows Exception {
session.write("服務端傳送訊息”+message);
session.write("quite");
}
@Override
public void exceptionCaught (IoSession session,Throwable cause)
throws Exception {
if(session.isConnected( )) {
session.close(true);
}
}
@Override
public void exceptionCaught(IoSession session,Throwable cause)
throws Exception {
if(session.isConnected) {
session.close(true);
}
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.printIn("服務端收到訊息“ + message.toString( ));
}
@Override
public void sessionClosed(IoSession session) throws Exception {
super.sessionClosded(session);
System.out.printIn("sessionCLosed");
}
@Override
public void sessionCreated(IoSession session) throws Exception {
session.getConfig( ).setIdleTime(IdleStatus.BOTH_IDLE,30000);
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
session.close(true);
}
@Override
public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
}
}