1 Netty 是什么?
Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.
Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端
2 Netty 的地位
Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE 开发中的地位
以下的框架都使用了 Netty,因为它们有网络通信需求!
- Cassandra - nosql 数据库
- Spark - 大数据分布式计算框架
- Hadoop - 大数据分布式存储框架
- RocketMQ - ali 开源的消息队列
- ElasticSearch - 搜索引擎
- gRPC - rpc 框架
- Dubbo - rpc 框架
- Spring 5.x - flux api 完全抛弃了 tomcat ,使用 netty 作为服务器端
- Zookeeper - 分布式协调框架
3 Netty 的优势
- Netty vs NIO,工作量大,bug 多
- 需要自己构建协议
- 解决 TCP 传输问题,如粘包、半包
- epoll 空轮询导致 CPU 100%
- 对 API 进行增强,使之更易用,如 FastThreadLocal => ThreadLocal,ByteBuf => ByteBuffer
- Netty vs 其它网络应用框架
- Mina 由 apache 维护,将来 3.x 版本可能会有较大重构,破坏 API 向下兼容性,Netty 的开发迭代更迅速,API 更简洁、文档更优秀
- 久经考验,16年,Netty 版本
- 2.x 2004
- 3.x 2008
- 4.x 2013
- 5.x 已废弃(没有明显的性能提升,维护成本高)
4 Netty案例
案例基础模板为黑马程序员教程chat案例
现有功能
1.用户登录
2.发送心跳
3.发送消息
4.创建群聊
5.发送群消息
6.加入群
7.退出群
8.退出程序
在此基础上已经做了以下改进
1.用户数据和群组数据由内存集合存储改为由数据库存储
2.在服务端添加接收和发送日志,方便调试
3.在客户端改进数据展示效果,方便客户浏览
4.对已有模块但未实现具体功能部分进行了完善
5.对客户端handlel进行了文件化
后期可以再进行的改进
1.用户的创建,权限,用户信息的完善。。。
2.群组的管理员,群组信息,用户加群的审核,加群后其他成员的通知。。。
3.日志的文件存储
4.RPC框架的结合
5.用户界面的输入bug修复
6.当服务端断开客户端连接后,客户端优雅断开连接并关闭
....
案例地址
https://gitee.com/torolhz/netty-chat