我想在端口 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/