標準的Netty服務端代碼格式如下
ServerBootstrap bootstrap = new ServerBootstrap();
///創建2個線程池,boss用於接待新來的請求,worker用於處理請求
NioEventLoopGroup boss = new NioEventLoopGroup();
NioEventLoopGroup worker = new NioEventLoopGroup();
try{
////設置線程池
bootstrap.group(boss, worker);
////設置channel工廠,之後會通過反射newChannel拿到這個channel的實例
bootstrap.channel(NioServerSocketChannel.class);
bootstrap.childHandler(
new DefaultInit()
);
ChannelFuture future = bootstrap.bind(8080).sync();
future.addListener(new GenericFutureListener<Future<? super Void>>() {
@Override
public void operationComplete(Future<? super Void> future) throws Exception {
System.out.println("----------------------------\n" +
"----- 服務器連接成功 -----\n" +
"------ Hello Netty -----\n" +
"----------------------------");
}
});
}catch (Exception e) {
e.printStackTrace();
boss.shutdownGracefully();
worker.shutdownGracefully();
}
finally {
}
在這個過程中出現了以下對象:
- ServerBootstrap
這是一個幫助啓動的類
- NioEventLoopGroup
這是一個線程組的對象,裏面存放NioEventLoop(這是一個單線程池),Netty的所有任務都會交給這個線程組裏的線程去執行
- ChannelFuture
這是一個繼承自原生JDK Future的接口,與原生不同的是,他提供一個channel()方法來獲取到當前的channel
- GenericFutureListener
這是一個監聽器,當任務完成時,會調用setSuccess防範,然後執行監聽器中的方法。採用的是觀察者模式