java - 如何使用 Spring Boot 在不同端口启动 Web 容器和 Netty 服务器?

标签 java spring sockets spring-boot netty

我想在端口 9061 上创建一个网络,并在同一个应用程序中在其他端口(例如 1066)上启动一个带有 netty 的套接字服务器,以便监听其他系统中我需要的一些信息。 我尝试了一些方法,但我将 servlet 端口与 netty 服务器端口绑定(bind)在一起,这是我不知道的事情。

这是代码:

@Component
public class TCPServer {

    @Autowired
    @Qualifier("serverBootstrap")
    private ServerBootstrap serverBootstrap;

    @Autowired
    @Qualifier("tcpSocketAddress")
    private InetSocketAddress tcpPort;

    private Channel serverChannel;

    @PostConstruct
    public void start() throws Exception {
        serverChannel =  serverBootstrap.bind(tcpPort).sync().channel().closeFuture().sync().channel();
    }

    @PreDestroy
    public void stop() throws Exception {
        serverChannel.close();
        serverChannel.parent().close();
    }

    public ServerBootstrap getServerBootstrap() {
        return serverBootstrap;
    }

    public void setServerBootstrap(ServerBootstrap serverBootstrap) {
        this.serverBootstrap = serverBootstrap;
    }

    public InetSocketAddress getTcpPort() {
        return tcpPort;
    }

    public void setTcpPort(InetSocketAddress tcpPort) {
        this.tcpPort = tcpPort;
    }
}

配置:

spring:
  application:
    name: MyServer
  main:
    banner-mode: off    

server:
  port: 9061

nettytcp:
  puerto: 1066

我从未见过 9061 端口。

最佳答案

这是因为您调用 .closeFuture().sync() ,它将阻塞,直到 ServerChannel 关闭,而这里永远不会。我认为您只想调用 serverBootstrap.bind(tcpPort).sync().channel()

关于java - 如何使用 Spring Boot 在不同端口启动 Web 容器和 Netty 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38084468/

相关文章:

Spring WebSocket : Handshake failed due to invalid Upgrade header: null

java - 如何在 Spring Junit 中创建 session

Python 套接字连接超时

java - 使用 BoxLayout 在 JPanel 中设置 JButton 的大小无法按预期工作

java - Hibernate 使用条件删除

java - spring boot 应用程序重新启动并显示消息 "Tomcat started"

javascript - Node.js 中的套接字与 Dart 中的套接字

c - 错误的文件描述符 : error on accept()

java - 如何使用 Apache HttpComponents 从 Java Socket 获取 HTTPRequest

JavaCamera2View启用flash opencv