Netty 学习一

一.Netty 特性

  1. 设计
  2. 易于使用
  3. 性能
  4. 健壮性
  5. 安全性
  6. 社区驱动

二、Netty核心组件

  1. Channel
  2. 回调
  3. Future
  4. 事件和ChannelHandler

三、环境配置

  1. jdk8、maven、Netty4
  2. pom文件引入官网推荐版本4.1.77.Final

在这里插入图片描述

<dependency>
   <groupId>io.netty</groupId>
   <artifactId>netty-all</artifactId>
   <version>4.1.77.Final</version>
</dependency>
  1. 官网地址
### Netty 学习教程与入门指南 #### 什么是NettyNetty个基于NIO的客户、服务器端编程框架,提供了异步的、事件驱动的网络应用程序框架和工具,可以快速开发高可用的客户端和服务器[^3]。 #### Netty的核心组件 以下是Netty中的核心组件及其作用: - **EventLoop**: 负责处理I/O操作以及执行注册到其上的任务。 - **Channel**: 表示个连接,用于读写数据。 - **Future**: 提供了种机制来获取异步操作的结果。 - **Pipeline & Handler**: 处理链模式实现请求响应流程控制。`Pipeline`是系列`Handler`组成的链条,负责拦截并处理消息流。 - **ByteBuf**: 更加高效灵活的字节容器替代传统的`ByteBuffer`[^1]。 #### Netty的主要优势 1. **API简单易用**:相比原始的Java NIO API,Netty封装了许多复杂细节,降低了开发难度。 2. **强大的功能支持**:内置多种编解码器和支持主流协议的功能模块。 3. **高度可定制化**:开发者可通过自定义`ChannelHandler`扩展通信逻辑。 4. **卓越性能表现**:经过大量测试表明,在相同条件下,Netty比其他NIO框架具有更高的吞吐量和更低延迟。 5. **稳定性强**:修复了已知的所有JDK NIO缺陷,并广泛应用于多个领域如Hadoop RPC框架Avro等实际生产环境中[^4]。 #### 初学者的第Netty Demo ("Hello World") 为了帮助理解如何使用Netty创建基本的应用程序,这里给出段简单的Echo Server例子: ```java import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; public class EchoServer { private final int port; public EchoServer(int port) { this.port = port; } public void start() throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1) EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); // (2) b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) // (3) .childHandler(new ChannelInitializer<SocketChannel>() { // (4) @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new EchoServerHandler()); } }); // Start the server. ChannelFuture f = b.bind(port).sync(); // (5) // Wait until the server socket is closed. f.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } public static void main(String[] args) throws Exception { int port = 8080; if (args.length > 0) { port = Integer.parseInt(args[0]); } new EchoServer(port).start(); } } ``` 上述代码展示了如何设置个基础的服务端启动过程,其中包含了两个线程组分别用来接受新的连接(`boss`) 和处理已建立好的连接 (`worker`) ,并通过管道添加处理器完成具体业务逻辑[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值