从零开始学习Netty - 学习笔记 -Netty入门-EventLoop

本文介绍了Netty,一个基于JavaNIO的高性能网络应用框架,其特点包括异步事件驱动、可定制性、多协议支持。文章详细讲解了如何使用Netty开发服务器端和客户端的HelloWorld示例,并探讨了EventLoop、EventLoopGroup和组件在Netty中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.Neety入门

什么是Netty

Netty是一个基于Java NIO的异步事件驱动的网络应用框架。它被广泛用于开发高性能高可靠性的网络通信程序,特别是服务器端和客户端程序。Netty提供了简洁而强大的API,使得开发者能够轻松地构建各种网络应用,包括实时通信系统、游戏服务器、分布式系统等。

Netty的主要特点包括:

  1. 异步和事件驱动Netty基于事件驱动模型,使用异步的方式处理网络IO操作,可以处理大量的并发连接而不需要大量的线程。
  2. 高性能:Netty采用了高效的NIO模型,以及优化的数据结构和算法,能够实现出色的性能表现。
  3. 可定制性:Netty提供了丰富的组件和可定制的API,使得开发者可以根据自己的需求对网络通信进行灵活的定制和扩展。
  4. 多协议支持:Netty支持多种常见的网络协议,包括HTTPWebSocketTCPUDP等,使得开发者可以轻松地实现各种类型的网络应用。

Netty的地位

以下是一些使用Netty框架的知名项目和框架:

  1. Apache Kafka:Kafka是一个分布式流处理平台,它使用Netty来处理网络通信,实现高效的消息传输。
  2. Elasticsearch:Elasticsearch是一个分布式搜索引擎,它使用Netty作为其节点之间通信的底层框架。
  3. gRPC:gRPC是一个高性能的远程过程调用框架,它使用Netty来实现底层的网络通信。
  4. Apache Dubbo:Dubbo是一个高性能的分布式服务框架,它使用Netty作为其网络通信的实现方式。
  5. RocketMQ:RocketMQ是一个开源的分布式消息队列,它使用Netty来实现消息的传输和通信。
  6. Spring 5:Spring 5 引入了对反应式编程的支持,使得开发人员可以更轻松地构建异步和非阻塞的应用程序,而 Netty 作为其底层的网络通信实现之一。Flux API完全抛弃Tomcat 使用Netty作为服务端
  7. Zookeeper:Zookeeper 是一个开源的分布式协调服务,用于管理和协调分布式系统中的各种信息,比如配置管理、命名服务、分布式锁等。

Netty的优势

Netty相对于Java NIO具有以下优势:

  1. 简化的编程模型:Netty提供了更高级别的抽象,使得开发者可以更轻松地编写网络应用程序。Netty隐藏了许多底层细节,提供了易于理解和使用的API,使得开发者能够更专注于业务逻辑的实现。
  2. 丰富的功能和组件:Netty提供了许多预置的编解码器、处理器和插件,涵盖了各种常见的网络通信场景,例如HTTP、WebSocket、UDP等。开发者可以直接使用这些组件,而无需重复实现相同的功能,大大加速了开发过程。
  3. 高性能和可靠性:Netty在底层实现了高效的事件驱动模型和异步IO机制,能够实现更高的吞吐量和更低的延迟。开发者可以借助Netty的优秀性能,构建高性能、高可靠性的网络应用程序。
  4. 可扩展性和灵活性:Netty的组件化设计使得它具有很好的可扩展性和灵活性。开发者可以根据自己的需求选择合适的组件和插件,或者自行扩展和定制特定的功能,从而更好地满足业务需求。
  5. 文档和社区支持:Netty拥有丰富的文档和活跃的社区支持,提供了大量的教程、示例代码和问题解答,帮助开发者快速上手并解决问题。开发者可以通过文档和社区获取到丰富的资源和支持,加速开发过程。

5.1.Hello World

5.1.1.目标

开发一个简单的服务器端 和 客户端

  • 客户端向服务器端发送 Hello,World
  • 服务器仅接收,不返回
implementation 'io.netty:netty-codec-http:4.1.106.Final'
5.1.2.服务器端的代码实现
public class HelloServer {
   
	private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

	public static void main(String[] args) {
   
		// ServerBootstrap 是一个启动 NIO 服务的辅助启动类
		// 1.负责组装Netty组装组件,启动服务器
		new ServerBootstrap()
				// 2。配置两个NioEventLoopGroup,一个用于接收客户端连接,另一个用于处理客户端读写
				// NioEventLoopGroup 是一个处理I/O操作的多线程事件循环 NioEventLoopGroup(selector,thread)(包含 选择器 和 线程 )
				.group(new NioEventLoopGroup())
				// 3.Netty 支持多种协议,这里是 NIO 的实现 还有OIO BIO ,EPOLL 等
				.channel(NioServerSocketChannel.class)
				// 4.配置ServerSocketChannel的选项 将来处理褚时间的一个分工,决定了worker(child)能执行哪些操作(handler)
				.childHandler(
				   // 5.channel代表和客户进行数据读写的通道 Initializer代表初始化器 负责添加别的handler
				   new ChannelInitializer<NioSocketChannel>() {
   
					@Override
					protected void initChannel(NioSocketChannel ch) throws Exception {
   
						// 6.添加具体的handler
						// 6.1.添加StringDecoder解码器 数据传输过来的时候,会先经过这个解码器(数据传输的时候都是ByteBuf) 解码成String
						ch.pipeline().addLast(new StringDecoder());
						// 6.2.添加ChannelInboundHandlerAdapter处理器(自定义的业务处理器)
						ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
   
							@Override
							public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
   
								// 读时间处理器
								logger.info("server receive msg: {}", msg);
							}

						});
					}
					// 7.绑定的监听端口
				}).bind(8080);
	}
}

5.1.3.客户端代码实现
public class HelloClient {
   
	private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值