问题描述
我正在实现将Web-Servlet和纯Java应用程序混合在一起的混合服务器应用程序.
I'm implementing an hybrid server application that mixes a Web-Servlet and a plain Java application.
java应用程序管理着用于远程设备的数千个套接字,而Web应用程序与用户进行交互以设置/读取任何套接字的状态. Java NIO或 Apache-MINA与Jboss-Netty 似乎是套接字的不错选择应用程序.
The java application manages thousands of sockets for remote devices, while the Web application interacts with the user to set/read the state of any socket. Java NIO, or Apache-MINA vs Jboss-Netty, seems to be good options for the sockets application.
第一个问题是,我可以在同一服务器上同时运行两个应用程序(带有Web界面的Servlet和JAVA NIO应用程序)吗?我现在使用Tomcat作为Servlet,并使用普通的procrun守护程序套接字应用程序
The first question is, can I run both applications (Servlet with web interface + JAVA NIO application) in the same server? I'am using now Tomcat for the Servlet and a plain procrun daemon for the socket-application
我不知道Spring是否适合这种组合,因为我还没有看到有关在Spring中使用NIO的任何信息.
I don't know if Spring is suitable for this combination, since I haven't seen any information about using NIO in Spring.
第二个问题是,两个应用程序之间如何通信?目前,我正在使用RMI,但我想知道是否有更好的解决方案.
The second question is, how can both applications communicate between them? For the moment I'am using RMI but I wonder if there is a better solution.
推荐答案
您肯定可以使用Spring在同一jvm中运行NIO套接字服务器和Web服务器.我已经使用Grails(无论如何都是春天的包装)来完成它.我在Grails的bootstrap类中启动了TCP服务器.
You can definitely run a NIO socket server and a web server in the same jvm using Spring. I have done it using Grails (which is a wrapper over spring anyway). I start the tcp server in the bootstrap class of Grails.
对于普通的Spring Web应用程序,您可以使用Spring框架生命周期侦听器或后处理器启动侦听特定端口(例如8090)和Web服务器(例如8080)的套接字服务器.
For normal spring web app, you can start the socket server listening at a particular port, say 8090 and the web server at say 8080 using spring framework lifecycle listeners or post processors.
使您的套接字服务器成为spring bean,并使用如下所示的init方法实际启动套接字服务器. Spring框架将在bean实例化时自动调用它.
Make your socket server to be a spring bean and use the init-method as shown below to actually start the socket server. Ths spring framework will automatically call it on bean instantiation.
网购服务器的示例配置如下:
An example configuration for a netty server could be like below:
<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>
这篇关于在SPRING服务器中使用JAVA NIO框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!