MINA 프레임 워 크 응용 입문 범례
Apache MINA(Multipurpose Infrastructure for Network Applications)는 고성능 과 가용성 이 높 은 네트워크 애플 리 케 이 션 을 개발 하 는 데 사용 되 는 기본 프레임 워 크 로 자바 의 socket 과 NIO 를 효과 적 이 고 선명 하 게 패 키 징 하여 개발 자 들 이 TCP/UDP 프로그램 을 개발 하 는 데 편리 하 며 원시 적 인 socket 을 사용 할 때 고려 해 야 할 여러 가지 복잡 하고 번 거 로 운 문제(스 레 드,성능,세 션 등)응용 에서 의 업무 논리 개발 에 더 많은 정력 을 기울 입 니 다.
2.MINA 프레임 의 상용 클래스:
IoAccepter 서버 쪽 IoConnector 클 라 이언 트 IoSession 현재 클 라 이언 트 가 서버 에 연결 하 는 실례 IoHandler 비 즈 니스 처리 논리 IoFilter 필 터 는 통신 계층 인터페이스 와 업무 계층 인터페이스 에 사용 된다.
3.범례 소스 코드
다음은 Apache MINA 로. 1.1.7 의 경우 JDK 5.0 이상 버 전이 필요 하고 slf4j 의 jar 패키지 도 필요 하 다.
1.서버 엔 드 메 인 소스 코드
public class Server {
public static final int PORT = 8080;
public static void main(String[] args) {
try{
IoAcceptor acceptor = new SocketAcceptor();
SocketAcceptorConfig config = new SocketAcceptorConfig();
config.setReuseAddress(true);
//
//config.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
config.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
//config.getFilterChain().addLast("logger", new LoggingFilter());
// HelloServer
acceptor.bind(new InetSocketAddress(PORT), new ServerSessionHandler(acceptor), config);
System.out.println("Server started on port " + PORT);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
2.서버 업무 처리 논리 소스 코드
public class ServerSessionHandler extends IoHandlerAdapter {
private IoAcceptor acceptor;
public ServerSessionHandler(IoAcceptor acceptor){
this.acceptor = acceptor;
}
/**
*
*/
public void sessionOpened(IoSession session) throws Exception {
session.setIdleTime(IdleStatus.BOTH_IDLE, 60); //session
//session.setAttribute("times", new Integer(0)); // session
Set set = acceptor.getManagedSessions(new InetSocketAddress(Server.PORT));
long count = 0;
if(set!=null) count = set.size();
System.out.println(" :" + count);
}
/**
*
*/
public void messageReceived(IoSession session, Object message)throws Exception {
Message msg = (Message)message;
msg.setMsgBody("in server side: " + msg.getMsgBody());
session.write(msg);
}
/**
* session
*/
public void sessionIdle(IoSession session, IdleStatus status)throws Exception {
System.out.println("Disconnecting the idle");
session.close();
}
/**
*
*/
public void sessionClosed(IoSession session) throws Exception {
System.out.println("session closed from " + session.getRemoteAddress());
Set set = acceptor.getManagedSessions(new InetSocketAddress(Server.PORT));
long count = 0;
if(set!=null) count = set.size();
System.out.println(" :" + count);
}
/**
*
*/
public void exceptionCaught(IoSession session, Throwable cause)throws Exception {
cause.printStackTrace();
session.close();
}
}
3.클 라 이언 트 메 인 소스 코드
public class Client {
private static final String HOSTNAME = "localhost";
private static final int PORT = 8080;
private static final int CONNECT_TIMEOUT = 30; //seconds
public void sendMessage(String msg){
SocketConnector connector = new SocketConnector();
SocketConnectorConfig config = new SocketConnectorConfig();
config.setConnectTimeout(CONNECT_TIMEOUT);
config.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
//config.getFilterChain().addLast("logger", new LoggingFilter());
Message message = new Message(1, msg);
connector.connect(new InetSocketAddress(HOSTNAME, PORT), new ClientSessionHandler(message), config);
}
public static void main(String[] args) {
for(int i=1;i<=5;i++){
Client client = new Client();
client.sendMessage("cjm_" + i);
}
}
}
4.클 라 이언 트 업무 논리 처리 소스 코드
public class ClientSessionHandler extends IoHandlerAdapter {
private Object msg;
public ClientSessionHandler(Object msg){
this.msg = msg;
}
public void sessionOpened(IoSession session) throws Exception {
session.write(this.msg);
}
public void messageReceived(IoSession session, Object message)throws Exception {
Message rm = (Message) message;
System.out.println("message is: " + rm.getMsgBody());
//session.write(rm);
//session.close();
}
public void sessionClosed(IoSession session) throws Exception {
System.out.println("session closed from Client");
}
public void exceptionCaught(IoSession session, Throwable cause)throws Exception {
session.close();
}
}
5.메시지 류 소스 코드
public class Message implements Serializable{
private static final long serialVersionUID = 1L;
private int type;
private String msgBody;
public Message(int type, String msgBody){
this.type = type;
this.msgBody = msgBody;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getMsgBody() {
return msgBody;
}
public void setMsgBody(String msgBody) {
this.msgBody = msgBody;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Pytest 테스트 프레임워크 기본 사용 방법 상세 정보pytest 소개 2. 매개 변수화를 지원하여 테스트할 테스트 용례를 세밀하게 제어할 수 있다. 3. 간단한 단원 테스트와 복잡한 기능 테스트를 지원할 수 있고selenium/appnium 등 자동화 테스트, 인터페...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.