在SPRING服务器中使用JAVA NIO框架

3

我正在实现一个混合服务器应用程序,将Web-Servlet和普通Java应用程序混合在一起。

Java应用程序管理着成千上万的远程设备socket,而Web应用程序与用户交互以设置/读取任何socket的状态。Java NIO或Apache-MINA vs Jboss-Netty似乎是socket应用程序的好选择。

第一个问题是,我能在同一台服务器上运行两个应用程序(带有Web界面的Servlet + JAVA NIO应用程序)吗?我现在正在使用Tomcat作为Servlet和纯procrun守护程序作为socket应用程序。

我不知道Spring是否适用于这种组合,因为我没有看到有关在Spring中使用NIO的任何信息。

第二个问题是,如何使两个应用程序之间进行通信?目前我正在使用RMI,但我想知道是否有更好的解决方案。

1个回答

11
你绝对可以使用Spring在同一个 JVM 中运行 NIO 套接字服务器和 Web 服务器。我已经使用过 Grails(它本质上是 Spring 的包装器)实现了这个功能。在 Grails 的引导类中启动 TCP 服务器。
对于普通的 Spring Web 应用程序,你可以使用 Spring 框架的生命周期监听器或后处理器来让 socket 服务器在特定端口(如8090)侦听,Web 服务器在另一个端口(如8080)上侦听。
把你的 socket 服务器作为 Spring bean,并像下面展示的那样使用 init-method 来启动 socket 服务器。这样 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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接