在这个系列的第一部分,我们将创建一个简单的聊天服务器。以下是核心的Spring Boot和Netty配置类:
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import org.springframework.context.SmartLifecycle;
import org.springframework.stereotype.Component;
@Component
public class ChatServer implements SmartLifecycle {
private final EventLoopGroup bossGroup = new NioEventLoopGroup();
private final EventLoopGroup workerGroup = new NioEventLoopGroup();
private ServerBootstrap bootstrap;
private ChannelFuture future;
private boolean running;
public void start() {
bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChatServerInitializer()); // 初始化器
try {
future = bootstrap.bind(8888).sync(); // 绑定端口
System.out.println("Chat server started at port 8888");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
public void stop() {
if (future != null) {
future.channel().close();
}
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
System.out.println("Chat server stopped");
}
@Override
public void start() {
running = true;
start();
}
@Override
public void stop(Runnable callback) {
stop();
callback.run();
}
@Override
public void stop() {
running = false;
stop();
}
@Override
public boolean isRunning() {
return running;
}
@Override
public int getPhase() {
return 0;
}
@Override
public boolean isAutoStartup() {
return true;
}
}
这个ChatServer
类实现了SmartLifecycle
接口,这意味着它可以由Spring Boot自动管理生命周期。start()
方法初始化Netty的ServerBootstrap
并绑定到8888端口。stop()
方法关闭Netty的通道和事件循环组,释放资源。
还需要一个ChatServerInitializer
类,继承自ChannelInitializer<SocketChannel>
,用于配置通道的处理器等。这里没有给出这个类的代码,但它会在服务器初始化器中被引用。
这个简单的服务器会在Spring Boot应用程序启动时启动,并在应用程序关闭时停止。下一部分,我们将实现ChatServerInitializer
和一个简单的消息处理器来开始聊天功能。