您绝对可以使用 Spring 在同一个 jvm 中运行 NIO 套接字服务器和 Web 服务器。我已经使用 Grails 完成了它(无论如何它都是 spring 的包装器)。我在 Grails 的引导类中启动 tcp 服务器。
对于普通的 Spring Web 应用程序,您可以使用 Spring 框架生命周期侦听器或后处理器启动在特定端口(例如 8090)和 Web 服务器在 8080 处侦听的套接字服务器。
使您的套接字服务器成为一个弹簧 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>