Эта статья основана на анализе финальной версии netty-4.1.8., главным образом, для анализа процесса инициализации Netty Server.
- Эта статья основана на анализе финальной версии netty-4.1.8., главным образом, для анализа процесса инициализации Netty Server.
- Что касается анализа исходного кода Netty — в первую очередь рекомендуется статья о клиенте Bootstrap.
- Поймите процесс инициализации и регистрации NioServerSocketChannel.
- Поймите процесс привязки ServerBootstrap и отношения между BossGroup и WorkGroup.
Корпус сервера Netty
public final class DiscardServer {
static final boolean SSL = System.getProperty("ssl") != null;
static final int PORT = Integer.parseInt(System.getProperty("port", "8009"));
public static void main(String[] args) throws Exception {
// Configure SSL.
final SslContext sslCtx;
if (SSL) {
SelfSignedCertificate ssc = new SelfSignedCertificate();
sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey()).build();
} else {
sslCtx = null;
}
// parent bossGroup
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
// child workerGroup
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
// create ServerBootstrap
ServerBootstrap b = new ServerBootstrap();
// binding group
b.group(bossGroup, workerGroup)
// binding channel
.channel(NioServerSocketChannel.class)
// bind parent handler
.handler(new LoggingHandler(LogLevel.INFO))
// Binding child handler
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) {
// Add handler to ChannelPipeline
ChannelPipeline p = ch.pipeline();
if (sslCtx != null) {
p.addLast(sslCtx.newHandler(ch.alloc()));
}
p.addLast(new DiscardServerHandler());
}…