-
Apache MINA와 WebSocket으로 통신하기.프로그래밍/Java 2019. 5. 28. 14:56728x90
Apache MINA는 아래와 같은 구조를 띄고 있다.
IoService와 IoHandler사이에 IoFliter들을 추가하여 원하는 스타일의 소켓 통신을 할 수 있다.
WebSocket같은 경우에도 HandShake과정과 같은 구현을 IoFliter를 추가함으로서 쉽게 해결할 수 있다.
하지만, 기본적인 Protocol들은 자체 Fliter로서 구현이 되어 있지만, WebSocket은 자체적으로 구현이 되어 있지 않다.
또한, https://tools.ietf.org/html/rfc6455에 모든 내용이 기록되어 있다.
https://github.com/syudal/Apache-Mina-IoFilter-WebSocket
Apache Mina와 연동하는 방법은 다음과 같다.
1. 위의 소스를 다운로드 받아 프로젝트 src의 적당한 위치에 압축을 해제하고 refactor한다.
2. 연동되어 있는 MainHandler의 messageRecived 부분을 예제와 같이 수정한다.
3. 이후 MainServer 구동부의 ioFilter를 수정하고 constant.java의 Protocol명을 수정하면 된다.
123456789101112131415161718192021222324252627282930MainServer.javaimport java.io.IOException;import java.net.InetSocketAddress;import java.nio.charset.Charset;import org.apache.mina.core.service.IoAcceptor;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;/**** @author syudal.tistory.com*/public class MainServer {public static void main( String[] args ) throws IOException{IoAcceptor acceptor = new NioSocketAcceptor();//acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new WebSocketFactory()));acceptor.setHandler( new MainServerHandler() );acceptor.getSessionConfig().setReadBufferSize( 2048 );acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );acceptor.bind( new InetSocketAddress( 포트주소 ) );}}cs 728x90'프로그래밍 > Java' 카테고리의 다른 글
[Java, Netty] PooledUnsafeDirectByteBuf을 Byte[]로 변환하기 (0) 2023.12.19 Apache MINA와 Netty의 차이 및 장단점 (0) 2023.03.05 Apache MINA와 WebSocket으로 SSL통신하기. (0) 2020.06.09 Apache MINA를 이용한 Echo서버 구현하기 (0) 2019.04.01 Apache FTP Server에 TLS 인증서 생성하기 (0) 2019.02.02 댓글