没有合适的资源?快使用搜索试试~ 我知道了~
NettyInAction中文版.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 56 浏览量
2023-12-27
16:47:28
上传
评论
收藏 2.63MB DOCX 举报
温馨提示
试读
191页
Netty是基于Java NIO的网络应用框架,如果你是Java网络方面的新手,那么本章将是你学习Java网络应用的开始;对于有经验的开发者来说,学习本章内容也是很好的复习。如果你熟悉NIO和NIO2,你可以随时跳过本章直接从第二章开始学习。在你的机器上运行第二章编写的Netty服务器和客户端。 Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来使开发网络应用程序,这种新的方式使得它很容易使用和有很强的扩展性。Netty的内部实现时很复杂的,但是Netty提供了简单易用的api从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现的,所以整个Netty都是异步的。
资源推荐
资源详情
资源评论
第一章:Netty 介绍
本章介绍
� Netty 介绍
� 为什么要使用 non-blocking IO(NIO)
� 阻塞 IO(blocking IO)和非阻塞 IO(non-blocking IO)对比
� Java NIO 的问题和在 Netty 中的解决方案
Netty 是基于 Java NIO 的网络应用框架,如果你是 Java 网络方面的新手,那么本章将
是你学习 Java 网络应用的开始;对于有经验的开发者来说,学习本章内容也是很好的复习。
如果你熟悉 NIO 和 NIO2,你可以随时跳过本章直接从第二章开始学习。在你的机器上运行
第二章编写的 Netty 服务器和客户端。
Netty 是一个 NIO client-server(客户端服务器)框架,使用 Netty 可以快速开发网络应用,
例如服务器和客户端协议。Netty 提供了一种新的方式来使开发网络应用程序,这种新的方
式使得它很容易使用和有很强的扩展性。Netty 的内部实现时很复杂的,但是 Netty 提供了
简单易用的 api 从网络处理代码中解耦业务逻辑。Netty 是完全基于 NIO 实现的,所以整个
Netty 都是异步的。
网络应用程序通常需要有较高的可扩展性,无论是 Netty 还是其他的基于 Java NIO 的
框架,都会提供可扩展性的解决方案。Netty 中一个关键组成部分是它的异步特性,本章将
讨论同步(阻塞)和异步(非阻塞)的 IO 来说明为什么使用异步代码来解决扩展性问题以及如何
使用异步。
对于那些初学网络变成的读者,本章将帮助您对网络应用的理解,以及 Netty 是如何
实现他们的。它说明了如何使用基本的 Java 网络 API,探讨 Java 网络 API 的优点和缺点
并阐述 Netty 是如何解决 Java 中的问题的,比如 Eploo 错误或内存泄露问题。
在本章的结尾,你会明白什么是 Netty 以及 Netty 提供了什么,你会理解 Java NIO 和
异步处理机制,并通过本书的其他章节加强理解。
1.1 为什么使用 Netty?
David John Wheeler 说过“在计算机科学中的所有问题都可以通过间接的方法解决。”作
为一个 NIO client-server 框架,Netty 提供了这样的一个间接的解决方法。Netty 提供了高
层次的抽象来简化 TCP 和 UDP 服务器的编程,但是你仍然可以使用底层地 API。
(David John Wheeler 有一句名言“计算机科学中的任何问题都可以通过加上一层逻辑层
来解决”,这个原则在计算机各技术领域被广泛应用)
1.1.1 不是所有的网络框架都是一样的
Netty 的“quick and easy(高性能和简单易用)”并不意味着编写的程序的性能和可维护性
会受到影响。从 Netty 中实现的协议如 FTP,SMTP,HTTP,WebSocket,SPDY 以及各
种二进制和基于文本的传统协议中获得的经验导致 Netty 的创始人要非常小心它的设计。
Netty 成功的提供了易于开发,高性能和高稳定性,以及较强的扩展性。
高调的公司和开源项目有 RedHat, Twitter, Infinispan, and HornetQ, Vert.x, Finagle,
Akka, Apache Cassandra, Elasticsearch,以及其他人的使用有助于 Netty 的发展,Netty
的一些特性也是这些项目的需要所致。多年来,Netty 变的更广为人知,它是 Java 网络的
首选框架,在一些开源或非开源的项目中可以体现。并且,Netty 在 2011 年获得 Duke's
Choice Award(Duke's Choice 奖)。
此外,在 2011 年,Netty 的创始人 Trustion Lee 离开 RedHat 后加入 Twitter,在这一
点上,Netty 项目奖会成为一个独立的项目组织。RedHat 和 Twitter 都使用 Netty,所以它
毫不奇怪。在撰写本书时 RedHat 和 Twitter 这两家公司是最大的贡献者。使用 Netty 的项
目越来越多,Netty 的用户群体和项目以及 Netty 社区都是非常活跃的。
1.1.2 Netty 的功能非常丰富
通过本书可以学习 Netty 丰富的功能。下图是 Netty 框架的组成
Netty 除了提供传输和协议,在其他各领域都有发展。Netty 为开发者提供了一套完整
的工具,看下面表格:
Development Area
Netty Features
Design(设计)
� 各种传输类型,阻塞和非阻塞套接字统一的 API
� 使用灵活
� 简单但功能强大的线程模型
� 无连接的 DatagramSocket 支持
� 链逻辑,易于重用
Ease of Use(易于使
用)
� 提供大量的文档和例子
� 除了依赖 jdk1.6+,没有额外的依赖关系。某些功能依赖 jdk1.7+,其他
特性可能有相关依赖,但都是可选的。
Performance(性能)
� 比 Java APIS 更好的吞吐量和更低的延迟
� 因为线程池和重用所有消耗较少的资源
� 尽量减少不必要的内存拷贝
Robustness(鲁棒性)
鲁棒性,可以理解为健壮性
� 链接快或慢或超载不会导致更多的 OutOfMemoryError
� 在高速的网络程序中不会有不公平的 read/write
Security(安全性)
� 完整的 SSL/TLS 和 StartTLS 支持
� 可以在如 Applet 或 OSGI 这些受限制的环境中运行
Community(社区)
� 版本发布频繁
� 社区活跃
除了列出的功能外,Netty 为 Java NIO 中的 bug 和限制也提供了解决方案。我们需要
深刻理解 Netty 的功能以及它的异步处理机制和它的架构。NIO 和 Netty 都大量使用了异步
代码,并且封装的很好,我们无需了解底层的事件选择机制。下面我们来看看为什么需要异
步 APIS。
1.2 异步设计
整个 Netty 的 API 都是异步的,异步处理不是一个新的机制,这个机制出来已经有一
些时间了。对网络应用来说,IO 一般是性能的瓶颈,使用异步 IO 可以较大程度上提高程序
性能,因为异步变的越来越重要。但是它是如何工作的呢?以及有哪些不同的模式可用呢?
异步处理提倡更有效的使用资源,它允许你创建一个任务,当有事件发生时将获得通
知并等待事件完成。这样就不会阻塞,不管事件完成与否都会及时返回,资源利用率更高,
程序可以利用剩余的资源做一些其他的事情。
本节将说明一起工作或实现异步 API 的两个最常用的方法,并讨论这些技术之间的差
异。
1.2.1 Callbacks(回调)
回调一般是异步处理的一种技术。一个回调是被传递到并且执行完该方法。你可能认
为这种模式来自 JavaScript,在 Javascript 中,回调是它的核心。下面的代码显示了如何使
用这种技术来获取数据。下面代码是一个简单的回调
[java] view plaincopy
1. package netty.in.action;
2.
3. public class Worker {
4.
5. public void doWork() {
6. Fetcher fetcher = new MyFetcher(new Data(1, 0));
7. fetcher.fetchData(new FetcherCallback() {
8. @Override
9. public void onError(Throwable cause) {
10. System.out.println("An error accour: " + cause.getMessage());
11. }
12.
13. @Override
14. public void onData(Data data) {
15. System.out.println("Data received: " + data);
16. }
17. });
18. }
19.
20. public static void main(String[] args) {
21. Worker w = new Worker();
22. w.doWork();
23. }
24.
25. }
[java] view plaincopy
1. package netty.in.action;
2.
3. public interface Fetcher {
4. void fetchData(FetcherCallback callback);
5. }
[java] view plaincopy
1. package netty.in.action;
2.
3. public class MyFetcher implements Fetcher {
4.
5. final Data data;
6.
7. public MyFetcher(Data data){
8. this.data = data;
9. }
10.
11. @Override
12. public void fetchData(FetcherCallback callback) {
13. try {
14. callback.onData(data);
15. } catch (Exception e) {
16. callback.onError(e);
17. }
18. }
19.
20. }
[java] view plaincopy
1. package netty.in.action;
2.
3. public interface FetcherCallback {
4. void onData(Data data) throws Exception;
5. void onError(Throwable cause);
6. }
[java] view plaincopy
1. package netty.in.action;
2.
3. public class Data {
4.
5. private int n;
6. private int m;
7.
8. public Data(int n,int m){
9. this.n = n;
10. this.m = m;
11. }
12.
13. @Override
14. public String toString() {
15. int r = n/m;
剩余190页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1901
- 资源: 3884
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功