架构师公众号
Netty作为异步事件驱动的网络框架,凭借出色的性能和设计,已成为高并发通信领域的标杆。它不仅简化了 Java NIO 编程的复杂性,还能轻松支持数万并发连接,被 Dubbo、Elasticsearch 等众多知名项目采用。本文将探索如何结合 Spring Boot 3 与 Netty,打造高性能即时通讯系统。
前置科普
在深入 Netty 之前,让我们先系统地了解 IO 模型的基础知识。已熟悉这些概念的读者可直接跳至下一章节。
IO模型的基础概念
阻塞与非阻塞线程访问资源,该资源是否准备就绪的一种处理方式:阻塞:线程请求资源时,如果资源未就绪,线程会一直等待,期间无法执行其他任务非阻塞:线程请求资源时,无论资源是否就绪,都会立即返回,线程可以继续执行其他任务同步与异步同步和异步是指访问数据的一种机制:同步:线程主动等待资源就绪并主动获取结果异步:线程不主动等待,通过回调或通知机制在资源就绪时获得结果小结一下:阻塞/非阻塞:是关于你在等待结果时能不能去做别的事同步/异步:是关于谁负责"盯着"任务完成 - 是你自己不断去查看,还是由别人通知你
Java中的三种IO模型
BIO (Blocking I/O)传统的同步阻塞 IO 模型,特点如下:工作流程:线程发起 IO 请求 → 线程阻塞等待 → IO 操作完成 → 线程继续执行资源消耗:每个连接需要独立的线程处理,当并发连接数增加时,系统需要创建大量线程适用场景:连接数较少、请求处理时间短的简单应用优缺点:实现简单直观,但在高并发场景下性能严重下降NIO (Non-blocking I/O)JDK 1.4引入的同步非阻塞 IO 模型:工作流程:Selector(选择器)监控多个 Channel(通道) → 有事件发生时处理对应 Channel(通道) → 处理完成后继续监控资源效率:单个线程可以管理多个连接,显著提高了系统的并发处理能力适用场景:高并发、低延迟的网络应用,如聊天服务器、游戏服务器AIO (Asynchronous I/O)JDK 7引入的异步非阻塞 IO 模型:工作流程:应用程序发起 IO 请求 → 继续执行其他任务 → IO 完成后回调通知特点:完全由操作系统通知机制驱动,应用无需主动轮询,真正实现了异步通信局限性:虽然 API 设计先进,但在 Linux 系统上实际表现不如预期,底层仍依赖多路复用适用场景:需要极高吞吐量的应用,特别是在 Windows 平台小结一下:BIO (阻塞I/O): 好比你去餐厅点餐,点完后只能坐在位置上干等,不能做其他事情,直到服务员把饭菜端上来。每个客人都需要一个专属服务员全程等候。NIO (非阻塞I/O): 好比你去餐厅点餐,拿了一个取餐号,然后可以去逛逛、玩手机。但你需要时不时自己去看电子屏幕,检查自己的号码是否显示。一个服务员可以同时应对多个客人的点餐需求。AIO (异步I/O): 好比你去餐厅点餐,点完后给服务员留下手机号,然后你可以随意活动。餐做好后,服务员会主动打电话通知你来取餐。你完全不需要操心查看进度。
初识Netty