3

Web サーブレットとプレーンな Java アプリケーションを組み合わせたハイブリッド サーバー アプリケーションを実装しています。

Java アプリケーションはリモート デバイス用の何千ものソケットを管理し、Web アプリケーションはユーザーとやり取りして任意のソケットの状態を設定/読み取ります。Java NIO、またはApache-MINA vs Jboss-Nettyは、ソケット アプリケーションに適したオプションのようです。

最初の質問は、両方のアプリケーション (Web インターフェースを備えたサーブレット + JAVA NIO アプリケーション) を同じサーバーで実行できるかということです。私は現在、サーブレットにTomcatを使用し、ソケットアプリケーションにプレーンなprocrunデーモンを使用しています

Spring で NIO を使用することに関する情報を見たことがないので、Spring がこの組み合わせに適しているかどうかはわかりません。

2 番目の質問は、両方のアプリケーションがそれらの間でどのように通信できるかということです。今のところ RMI を使用していますが、もっと良い解決策があるのではないかと思います。

4

1 に答える 1

11

Spring を使用すると、同じ jvm で NIO ソケット サーバーと Web サーバーを確実に実行できます。私はGrails(とにかくSpringのラッパーです)を使用してそれを行いました。Grails のブートストラップ クラスで tcp サーバーを起動します。

通常の Spring Web アプリの場合、特定のポート (たとえば 8090) でリッスンするソケット サーバーを開始し、Spring フレームワーク ライフサイクル リスナーまたはポスト プロセッサを使用して、たとえば 8080 で Web サーバーを開始できます。

ソケット サーバーを Spring Bean にして、以下に示すように init メソッドを使用して実際にソケット サーバーを起動します。このSpringフレームワークは、Beanのインスタンス化で自動的に呼び出します。

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>
于 2011-04-25T12:15:15.277 に答える