gpt4 book ai didi

java - 如何在 Spigot 服务器上启动外部 Netty 服务器

转载 作者:行者123 更新时间:2023-12-02 02:33:50 24 4
gpt4 key购买 nike

我试图在 Spigot 服务器上启动外部 Netty 服务器。

我唯一尝试的是从一开始就启动它,但问题是用户无法加入并且服务器超时。

这是 Netty 客户端的代码,它应该连接到运行良好的 Netty 服务器。

EventLoopGroup eventLoopGroup = EPOLL ? new EpollEventLoopGroup() : new NioEventLoopGroup();
try {
Bootstrap bootstrap = new Bootstrap()
.group( eventLoopGroup )
.option( ChannelOption.TCP_NODELAY, true )
.option( ChannelOption.SO_KEEPALIVE, true )
.channel( EPOLL ? EpollSocketChannel.class : NioSocketChannel.class )
.handler( new ChannelInitializer<Channel>() {
protected void initChannel( Channel channel ) throws Exception {
preparePipeline( channel );
}
} );

ChannelFuture f = bootstrap.connect(
ReplaySpigotServer.getConnection().configuration.getString( "server-host" ),
ReplaySpigotServer.getConnection().configuration.getInt( "server-port" ) )
.sync();

f.channel().closeFuture().sync();
} catch ( InterruptedException e ) {
e.printStackTrace();
} finally {
eventLoopGroup.shutdownGracefully();

最佳答案

在您的代码中,您可以使用 .connect().sync() 启动服务器,然后使用 closeFuture().sync(); 等待它退出.

因为您正在等待连接结束,这意味着当您使用 netty channel 时,Bukkit/Spigot 服务器无法处理任何与用户相关的数据包。

由于调用 eventLoopGroup.shutdownGraceously(); 意味着所有打开的连接都会关闭,因此我们需要使用某种方法来防止这种情况发生。

您可以在插件中执行的操作是在 onEnable 中创建一个新的 eventLoopGroup,然后稍后创建一个新的 netty 连接,当您的插件被禁用时,断开该连接。

private EventLoopGroup eventLoopGroup;

public void onEnable(){
eventLoopGroup = EPOLL ? new EpollEventLoopGroup() : new NioEventLoopGroup();
}

public void onDisable(){
eventLoopGroup.shutdownGracefully();
}

public void newConnection() {
Bootstrap bootstrap = new Bootstrap()
.group( eventLoopGroup )
.option( ChannelOption.TCP_NODELAY, true )
.option( ChannelOption.SO_KEEPALIVE, true )
.channel( EPOLL ? EpollSocketChannel.class : NioSocketChannel.class )
.handler( new ChannelInitializer<Channel>() {
protected void initChannel( Channel channel ) throws Exception {
preparePipeline( channel );
}
} );

ChannelFuture f = bootstrap.connect(
ReplaySpigotServer.getConnection().configuration.getString( "server-host" ),
ReplaySpigotServer.getConnection().configuration.getInt( "server-port" ) )
.sync();

}

关于java - 如何在 Spigot 服务器上启动外部 Netty 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46696124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com