복붙노트

[SPRING] SPRING 서버에서 JAVA NIO 프레임 워크 사용

SPRING

SPRING 서버에서 JAVA NIO 프레임 워크 사용

Web-Servlet과 일반 Java 응용 프로그램을 혼합 한 하이브리드 서버 응용 프로그램을 구현하고 있습니다.

java 응용 프로그램은 원격 장치의 수천 개의 소켓을 관리하는 반면 웹 응용 프로그램은 사용자와 상호 작용하여 소켓의 상태를 설정 / 읽습니다. Java NIO 또는 Apache-MINA와 Jboss-Netty는 소켓 응용 프로그램을위한 좋은 옵션 인 것으로 보입니다.

첫 번째 질문은 동일한 서버에서 두 응용 프로그램 (웹 인터페이스가있는 서블릿 + Java NIO 응용 프로그램)을 모두 실행할 수 있습니까? 이제는 서블릿 용 Tomcat과 소켓 애플리케이션 용 일반 procrun 데몬을 사용합니다.

Spring에서 NIO 사용에 대한 정보를 보지 못했기 때문에 Spring이이 조합에 적합한 지 모르겠습니다.

두 번째 질문은 두 애플리케이션이 둘 사이에서 어떻게 통신 할 수 있는가하는 것입니다. 지금 당장은 RMI를 사용하고 있지만 더 나은 솔루션이 있는지 궁금합니다.

해결법

  1. ==============================

    1.Spring을 사용하여 동일한 jvm에서 NIO 소켓 서버와 웹 서버를 확실히 실행할 수 있습니다. 나는 Grails (어쨌든 봄에 래퍼)를 사용하여이 작업을 수행했습니다. Grails의 부트 스트랩 클래스에서 tcp 서버를 시작합니다.

    Spring을 사용하여 동일한 jvm에서 NIO 소켓 서버와 웹 서버를 확실히 실행할 수 있습니다. 나는 Grails (어쨌든 봄에 래퍼)를 사용하여이 작업을 수행했습니다. Grails의 부트 스트랩 클래스에서 tcp 서버를 시작합니다.

    일반적인 스프링 웹 응용 프로그램의 경우 특정 포트 (예 : 8090)에서 수신 소켓 서버를 시작하고 스프링 프레임 워크 수명주기 리스너 또는 사후 프로세서를 사용하여 8080에서 웹 서버를 시작할 수 있습니다.

    소켓 서버를 스프링 빈으로 만들고 아래와 같이 init 메소드를 사용하여 실제로 소켓 서버를 시작하십시오. 스프링 프레임 워크는 빈 인스턴스화시이를 자동으로 호출합니다.

    netty 서버의 구성 예는 다음과 같습니다.

    <bean id="tcpServer" class="netty.NettyTCPServer"
            init-method="createServerBootstrap" destroy-method="stopServer">
            <property name="pipelineFactory" ref="pipelineFactory"></property>
    </bean>
    
    <bean id="pipelineFactory" class="netty.HandshakePipelineFactory">
            <lookup-method name="createHandshakeHandler" bean="handshakeHandler" />
            <property name="stringDecoder" ref="stringDecoder"></property>
            <property name="stringEncoder" ref="stringEncoder"></property>
            <property name="nulEncoder" ref="nulEncoder"></property>
            <property name="frameSize" value="256"></property>
    </bean>
    
  2. from https://stackoverflow.com/questions/3758970/using-java-nio-framework-in-spring-server by cc-by-sa and MIT license