目录
- 高并发相关
- 提高通信效率
- ==Netty==
- 作用:
- 哪些框架使用它:
- Channel
- ChannelHandler 和 ChannelPipeline
- EventLoop 和 EventLoopGroup
- **涉及的名词解释:**
- ==NIO==
- ==Socket==
- ==Nginx==
高并发相关
主要用来解决IO密集型程序(大量文件读写,网络通信,数据库交互),主要使用异步IO,多线程
提高通信效率
Netty
作用:
Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。(感觉只要知道他是提高通讯效率的就行了)
哪些框架使用它:
Dubbo、zk、RocketMQ、ElasticSearch、Spring5(对HTTP协议的实现)、GRPC、Spark等大型开源项目都在使用Netty作为底层通讯框架
Netty 的三大核心组件分别为 Channel
、ChannelHandler
(以及相关的 ChannelPipeline
)和 EventLoop
(及其所在的 EventLoopGroup
)。虽然没有明确指出“三大组件”的具体定义,但结合上下文通常是指这三个主要概念。以下是它们各自常用的函数或方法:
Channel
open()
:创建一个新的 Channel 实例。bind(int port)
或bind(InetSocketAddress address)
:绑定到指定的端口或地址,开始监听连接。writeAndFlush(Object msg)
:将对象写入到 Channel 并尝试刷新输出缓冲区。close()
或close(ChannelFuture future)
:关闭 Channel。pipeline()
:获取关联的 ChannelPipeline,用于处理入站和出站事件。
ChannelHandler 和 ChannelPipeline
channelRegistered(ChannelHandlerContext ctx)
/channelUnregistered(ChannelHandlerContext ctx)
:当 Channel 注册到 EventLoop 或从 EventLoop 上解除注册时触发。channelRead(ChannelHandlerContext ctx, Object msg)
:读取到新的数据时触发,用于处理入站数据。write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise)
:处理出站数据,即将数据写入 Channel。addLast(String name, ChannelHandler handler)
:向 ChannelPipeline 添加一个处理器。remove(ChannelHandler handler)
:从 ChannelPipeline 中移除指定的处理器。
EventLoop 和 EventLoopGroup
register(Channel channel)
:将 Channel 注册到 EventLoop 上,使 EventLoop 开始处理该 Channel 的 I/O 事件。execute(Runnable task)
:在 EventLoop 上执行给定的任务。next()
:从 EventLoopGroup 中获取下一个可用的 EventLoop。shutdownGracefully()
:优雅地关闭所有 EventLoop,并释放所有相关资源。
以上只是简要列举了一些常见方法,实际上每个组件提供的方法非常丰富,覆盖了网络通信的各种需求,包括但不限于连接管理、数据读写、错误处理、定时任务调度等。在实际使用 Netty 构建网络应用时,根据业务逻辑的不同,开发者会选择相应的方法来完成特定功能。
Netty 是一个强大的 Java 网络编程框架,适用于构建高性能、高并发、低延迟的网络应用程序。以下是一些实际应用场景和功能实现中会用到 Netty 的场合:
-
高性能网络服务器:
- 实现 HTTP 或 HTTPS 服务器,替代传统的基于 Tomcat、Jetty 等容器的同步阻塞模型,提供更好的性能和扩展性。
- 构建 WebSocket 服务器,实现实时通讯、推送服务、在线聊天室等功能。
-
异步RPC框架:
- 在分布式系统中,Netty 可以作为远程过程调用(RPC)框架的底层通信库,例如 Dubbo、gRPC 等,用于服务间高效、低延迟的通信。
-
消息中间件:
- 开发消息队列系统(如ActiveMQ、RocketMQ的部分组件),利用Netty处理大量并发的发布/订阅请求和消息传输。
-
游戏服务器:
- 在游戏开发中,Netty 被广泛应用于构建多人在线游戏的后端服务器,处理玩家间的实时交互数据。
-
大数据处理:
- 大数据集群中的节点间通信,如Apache Hadoop、Spark等项目的部分组件可能会采用Netty进行高效的数据传输。
-
金融交易系统:
- 对于需要处理高频交易、实时报价等场景,Netty能够支撑高并发、低延迟的交易数据交换。
-
移动互联网后台服务:
- 移动APP的后台服务,如社交应用、新闻推送、即时通讯应用的后台服务,使用Netty构建高效的长连接通信服务。
-
TCP/UDP协议开发:
- 自定义私有协议栈,基于Netty可以方便地开发和部署基于TCP、UDP或其他自定义协议的网络应用。
-
微服务架构中的服务间通信:
- 在微服务架构中,Netty可以作为各个服务间通信的基础组件,提供可靠的异步通信机制。
总之,任何需要进行高效网络通信、处理大量并发连接、减少资源消耗、优化网络性能的场景,都可能考虑使用Netty作为其通信层的核心框架。
涉及的名词解释:
网络应用程序框架: 用于简化网络通信和开发服务器端应用程序的一系列工具、库和服务的集合。常见网络应用程序框架:Spring MVC,spring Boot,Netty等。
I/O三种模式:
这位大佬解释的太好了!原文在这里
NIO
感觉有点太底层了,先不了解,之后看看:大佬文章
通道:简化直接与Socket进行操作的复杂性
选择器:实现一个线程处理多个客户端链接
Java高级架构线路图学习路线内含Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式,高并发
Socket
感觉更底层,也是等等再看
Nginx
Nginx 不是分布式框架,而是一款高性能的 Web 服务器和反向代理服务器,同时也可作为邮件代理服务器使用。Nginx 在分布式系统中的作用主要是:
- 负载均衡:Nginx 可以作为反向代理服务器,将客户端请求分发到多个后端服务器,实现流量分摊,提高系统的并发处理能力和可用性,这是构建分布式系统的重要环节。
- 动静分离:通过配置,Nginx 可以将动态请求转发给应用服务器(如Tomcat、Node.js等),静态内容则直接由Nginx处理并返回,提高整体系统的响应速度。
- 缓存服务:Nginx 提供缓存功能,对于静态资源或者经过特别配置的动态内容,可以直接从缓存中快速响应,减轻后端服务器的压力。
- API Gateway:在微服务架构中,Nginx 可以作为 API 网关,统一处理来自客户端的请求,路由到相应的微服务,同时还可以做权限验证、限流、熔断等操作。
虽然 Nginx 不是严格意义上的分布式框架,但它在分布式系统中承担着重要角色,为分布式系统提供了关键的服务接入和流量管理能力。