2010-09-21 5 views
3

J'implémente une application de serveur hybride qui mélange une servlet Web et une application Java simple.Utilisation de la structure JAVA NIO dans le serveur SPRING

L'application Java gère des milliers de sockets pour les périphériques distants, tandis que l'application Web interagit avec l'utilisateur pour définir/lire l'état de toute socket. Java NIO, ou Apache-MINA vs Jboss-Netty, semble être de bonnes options pour l'application de sockets.

La première question est, puis-je exécuter les deux applications (Servlet avec interface Web + application JAVA NIO) dans le même serveur? J'utilise maintenant Tomcat pour la servlet et un démon plain procrun pour l'application socket

Je ne sais pas si Spring convient à cette combinaison, puisque je n'ai vu aucune information sur l'utilisation de NIO au printemps .

La deuxième question est, comment les deux applications peuvent-elles communiquer entre elles? Pour le moment j'utilise RMI mais je me demande s'il y a une meilleure solution.

Répondre

10

Vous pouvez certainement exécuter un serveur socket NIO et un serveur web dans le même jvm en utilisant Spring. Je l'ai fait en utilisant Grails (qui est une enveloppe au printemps de toute façon). Je démarre le serveur tcp dans la classe bootstrap de Grails. Pour l'application web printanière normale, vous pouvez démarrer le serveur de socket écoutant un port particulier, par exemple 8090 et le serveur Web à 8080 par exemple en utilisant des programmes d'écoute de cycle de vie ou des post-processeurs à ressort. Faites en sorte que votre serveur de socket soit un haricot de printemps et utilisez la méthode init comme indiqué ci-dessous pour démarrer réellement le serveur de socket. Le framework Spring l'appellera automatiquement sur l'instanciation du bean.

Un exemple de configuration pour un serveur Netty pourrait être comme ci-dessous:

<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> 
Questions connexes