如何使用 spring 启动在不同端口启动 web containter 和 netty 服务器?
How can I start web containter and netty server in different ports with spring boot?
我想在端口 9061 上创建一个 Web,并在同一个应用程序中在其他端口(例如 1066)上启动一个带有 netty 的套接字服务器,以便从其他系统侦听我需要的一些信息。
我尝试了一些东西,但我将 servlet 端口与 netty 服务器端口绑定,这是我不知道的。
代码如下:
@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()
.
我想在端口 9061 上创建一个 Web,并在同一个应用程序中在其他端口(例如 1066)上启动一个带有 netty 的套接字服务器,以便从其他系统侦听我需要的一些信息。 我尝试了一些东西,但我将 servlet 端口与 netty 服务器端口绑定,这是我不知道的。
代码如下:
@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()
.