Netty 是一个高性能的网络通信框架,封装了底层复杂的 socket 编程细节,让我们可以高效快速构建自己的应用
有哪些开源框架用了 Netty 呢?grpc、dubbo、kafka、rocketmq、zookeeper、hadoop
server 端启动 netty 服务器
public static void main(String[] args) throws InterruptedException {
EventLoopGroup boss = new NioEventLoopGroup();
EventLoopGroup worker = new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(boss, worker)
.channel(NioServerSocketChannel.class)
// 设置接收缓冲区大小
// 控制窗口值
.childOption(ChannelOption.SO_RCVBUF, 32 * 1024)
// 设置发送缓冲区大小
.childOption(ChannelOption.SO_SNDBUF, 32 * 1023)
.childHandler(new ChannelInitializer() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline channelPipeline = ch.pipeline();
channelPipeline.addLast(new JdrpcCodec());
channelPipeline.addLast(new JdrpcServerHandler());
}
});
ChannelFuture channelFuture = serverBootstrap.bind(JdrpcConstant.PORT).sync();
channelFuture.addListener(future -> {
if (future.isSuccess()) {
logger.info("服务启动成功,绑定端口: {}", JdrpcConstant.PORT);
} else {
logger.error("服务启动失败");
}
});
channelFuture.channel().closeFuture().sync();
} finally {
boss.shutdownGracefully();
worker.shutdownGracefully();
}
}
启动 client
public static void main(String[] args) throws InterruptedException {
EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(eventLoopGroup)
.channel(NioSocketChannel.class)
// 连接超时时间
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
// 保持长连接心跳
.option(ChannelOption.SO_KEEPALIVE, true)
// 禁用 Nagle 算法
.option(ChannelOption.TCP_NODELAY, true)
.handler(new ChannelInitializer() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline()
// 设置编码解码器
.addLast(new JdrpcCodec())
// 业务逻辑处理类
.addLast(new JdrpcClientHandler());
}
});
bootstrap.connect("127.0.0.1", JdrpcConstant.PORT).addListener(future -> {
if (future.isSuccess()) {
logger.info("