1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-07-03 10:46:45 +08:00

77 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Netty
**本文章总结了 《Netty in Action》(Netty实战) 和 《Netty 4.x User Guide 》(Netty 4.x 用户指南)
再根据本人实际学习体验总结而成。本部分内容可能不那么全面但是我尽量挑选Netty中我认为比较重要的部分做讲解。**
学习Netty相信大部分同学都会选择 《Netty in Action》 和 《Netty 4.x User Guide 》,
这里我推荐它们的通读版本这二本书的通读版本的作者都为同一人通读版本对《Netty in Action》做出了更为精简的概述
所以各位同学可酌情挑选阅读。
- [《Netty in Action》](https://waylau.com/essential-netty-in-action/index.html)
- [《Netty 4.x User Guide》](https://waylau.gitbooks.io/netty-4-user-guide/content)
其次我认为只看书是不够的这里我推荐一些关于Netty入门比较优秀的视频供各位同学参考
推荐视频观看的顺序即下列顺序,各位同学不需要每个视频的每个章节都看,只需要挑选互补的内容学习即可:
- [韩顺平Netty教程](https://www.bilibili.com/video/BV1DJ411m7NR)
- [张龙Netty教程](https://www.bilibili.com/video/BV1cb411F7En)
- [索南杰夕Netty RPC实现](https://www.bilibili.com/video/BV1Rb411h7jZ)
最后在学习Netty之前我们需要对 IO模型(网络IO模型)有一个大概的认知,可以参考我编写的:
[Linux IO模型](../java/Linux_IO模型.md) 。
````text
如有错误之处,敬请指教。
````
## Netty是什么?
Netty是Red Hat开源的一个利用Java的高级网络能力隐藏其(Java API)背后的复杂性而提供一个易于使用的 NIO 客户端/服务端框架。
Netty提供了高性能和可扩展性让你自由地专注于你真正感兴趣的东西。 Netty简化了网络程序的开发过程使用它
我们可以快速简单地开发网络应用程序比如客户端和服务端的通信协议TCP和UDP的Socket开发。
### Netty的特点
Netty作为一款优秀的网络框架自然有令人折服的特点
- 设计:
- 针对多种传输类型的同一接口。
- 简单但更强大的线程模型。
- 真正的无连接的数据报套接字支持。
- 链接逻辑复用。
- 性能: Netty的高性能是它被广泛使用的一个重要的原因我们可能都认为Java不太适合
编写游戏服务端程序但Netty的到来无疑是降低了怀疑的声音。
- 较原生Java API有更好的吞吐量较低的延时。
- 资源消耗更少(共享池和重用)。
- 减少内存拷贝。
- 健壮性: 原生NIO的客户端/服务端程序编写较为麻烦,如果某个地方处理的不好,可能会
导致一些意料之外的异常如内存溢出死循环等等而Netty则为我们简化了原生API
的使用,这使得我们编写出来的程序不那么容易出错。
- 社区: Netty快速发展的一个重要的原因就是它的社区非常活跃这也使得采用它的开发者越来越多。
## Netty架构总览
下面是Netty的模块设计部分
![Netty架构总览](../../media/pictures/netty/Netty架构总览.png)
Netty提供了通用的传输APITCP/UDP...多种网络协议HTTP/WebSocket...基于事件驱动的IO模型
超高性能的零拷贝...
上面说的这些模块和功能只是Netty的一部分具体的组件在后面的部分会有较为详细的介绍。