没有合适的资源?快使用搜索试试~ 我知道了~
Netty3.1中文用户手册.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 26 浏览量
2023-11-16
13:20:33
上传
评论
收藏 256KB DOC 举报
温馨提示
试读
26页
Netty3.1中文用户手册
资源推荐
资源详情
资源评论
Netty 3.1 中文用户手册
下载:http://www.codepub.com/software/view-software-17736.html
在线阅读:http://edu.codepub.com/2010/0413/21990.php
The Netty Project 3.1 User Guide
The Proven Approach to Rapid Network Application
Development
3.1.5.GA, r1772
序言 1
1. 问题 1
2. 方案 2
第一章. 开始 2
1.1. 开始之前 3
1.2. 抛弃协议服务 3
1.3. 查看接收到的数据 5
1.4. 响应协议服务 6
1.5. 时间协议服务 7
1.6. 时间协议服务客户端 9
1.7. 流数据的传输处理 11
1.7.1. Socket Buffer 的缺陷 11
1.7.2. 第一种方案 11
1.7.3. 第二种方案 13
1.8. 使用 POJO 代替 ChannelBuffer 15
1.9. 关闭你的应用 18
1.10. 总述 21
第二章. 架构总览 22
2.1. 丰富的缓冲实现 22
2.2. 统一的异步 I/O API 22
2.3. 基于拦截链模式的事件模型 23
2.4. 适用快速开发的高级组件 24
2.4.1. Codec 框架 24
2.4.2. SSL / TLS 支持 25
2.4.3. HTTP 实现 25
2.4.4. Google Protocol Buffer 整合 25
2.5. 总述 26
序言
本指南对 Netty 进行了介绍并指出其意义所在。
1. 问题
现在,我们使用适合一般用途的应用或组件来和彼此通信。例如,我们常常使用一个 HTTP 客户端从远程
服务器获取信息或者通过 web services 进行远程方法的调用。
然而,一个适合普通目的的协议或其实现并不具备其规模上的扩展性。例如,我们无法使用一个普通的
HTTP 服务器进行大型文件,电邮信息的交互,或者处理金融信息和多人游戏数据那种要求准实时消息传
递的应用场景。因此,这些都要求使用一个适用于特殊目的并经过高度优化的协议实现。例如,你可能想
要实现一个对基于 AJAX 的聊天应用,媒体流或大文件传输进行过特殊优化的 HTTP 服务器。你甚至可能
想去设计和实现一个全新的,特定于你的需求的通信协议。
另一种无法避免的场景是你可能不得不使用一种专有的协议和原有系统交互。在这种情况下,你需要考虑
的是如何能够快速的开发出这个协议的实现并且同时还没有牺牲最终应用的性能和稳定性。
2. 方案
Netty 是一个异步的,事件驱动的网络编程框架和工具,使用 Netty 可以快速开发出可维护的,高性能、
高扩展能力的协议服务及其客户端应用。
也就是说,Netty 是一个基于 NIO 的客户,服务器端编程框架,使用 Netty 可以确保你快速和简单的开发
出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty 相当简化和流线化了网络应用的编程开
发过程,例如,TCP 和 UDP 的 socket 服务开发。
“快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸收了多种协议的
实现经验,这些协议包括 FTP,SMPT,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,
Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。
一些用户可能找到了某些同样声称具有这些特性的编程框架,因此你们可能想问 Netty 又有什么不一样的
地方。这个问题的答案是 Netty 项目的设计哲学。从创立之初,无论是在 API 还是在其实现上 Netty 都致
力于为你提供最为舒适的使用体验。虽然这并不是显而易见的,但你终将会认识到这种设计哲学将令你在
阅读本指南和使用 Netty 时变得更加得轻松和容易。
第一章. 开始
这一章节将围绕 Netty 的核心结构展开,同时通过一些简单的例子可以让你更快的了解 Netty 的使用。当
你读完本章,你将有能力使用 Netty 完成客户端和服务端的开发。
如果你更喜欢自上而下式的学习方式,你可以首先完成 第二章:架构总览 的学习,然后再回到这里。
1.1. 开始之前
运行本章示例程序的两个最低要求是:最新版本的 Netty 程序以及 JDK 1.5或更高版本。最新版本的 Netty
程序可在项目下载页 下载。下载正确版本的 JDK,请到你偏好的 JDK 站点下载。
这就已经足够了吗?实际上你会发现,这两个条件已经足够你完成任何协议的开发了。如果不是这样,请
联系 Netty 项目社区 ,让我们知道还缺少了什么。
最终但不是至少,当你想了解本章所介绍的类的更多信息时请参考 API 手册。为方便你的使用,这篇文档
中所有的类名均连接至在线 API 手册。此外,如果本篇文档中有任何错误信息,无论是语法错误,还是打
印排版错误或者你有更好的建议,请不要顾虑,立即联系 Netty 项目社区 。
1.2. 抛弃协议服务
在这个世界上最简化的协议不是“Hello,world!”而是抛弃协议 。这是一种丢弃接收到的任何数据并不做任何
回应的协议。
实现抛弃协议(DISCARD protocol),你仅需要忽略接受到的任何数据即可。让我们直接从处理器
(handler)实现开始,这个处理器处理 Netty 的所有 I/O 事件。
Java 代码
1 package org.jboss.netty.example.discard;
2
3 @ChannelPipelineCoverage("all")1
4 public class DiscardServerHandler extends SimpleChannelHandler {2
5
6 @Override
7 public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {3
8 }
9
10 @Override
11 public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {4
12 e.getCause().printStackTrace();
13
14 Channel ch = e.getChannel();
15 ch.close();
16 }
17 }
代码说明
1)ChannelPipelineCoverage 注解了一种处理器类型,这个注解标示了一个处理器是否可被多个
Channel 通道共享(同时关联着 ChannelPipeline)。DiscardServerHandler 没有处理任何有状态的信
息,因此这里的注解是“all”。
2)DiscardServerHandler 继承了 SimpleChannelHandler,这也是一个 ChannelHandler 的实现。
SimpleChannelHandler 提供了多种你可以重写的事件处理方法。目前直接继承
SimpleChannelHandler 已经足够了,并不需要你完成一个自己的处理器接口。
3)我们这里重写了 messageReceived 事件处理方法。这个方法由一个接收了客户端传送数据的
MessageEvent 事件调用。在这个例子中,我们忽略接收到的任何数据,并以此来实现一个抛弃协议
(DISCARD protocol)。
4)exceptionCaught 事件处理方法由一个 ExceptionEvent 异常事件调用,这个异常事件起因于 Netty
的 I/O 异常或一个处理器实现的内部异常。多数情况下,捕捉到的异常应当被记录下来,并在这个方法
中关闭这个 channel 通道。当然处理这种异常情况的方法实现可能因你的实际需求而有所不同,例如,
在关闭这个连接之前你可能会发送一个包含了错误码的响应消息。
目前进展不错,我们已经完成了抛弃协议服务器的一半开发工作。下面要做的是完成一个可以启动这个包
含 DiscardServerHandler 处理器服务的主方法。
Java 代码
18 package org.jboss.netty.example.discard;
19
20 import java.net.InetSocketAddress;
21 import java.util.concurrent.Executors;
22
23 public class DiscardServer {
24
25 public static void main(String[] args) throws Exception {
26 ChannelFactory factory =
27 new NioServerSocketChannelFactory (
28 Executors.newCachedThreadPool(),
29 Executors.newCachedThreadPool());
30
31 ServerBootstrap bootstrap = new ServerBootstrap (factory);
32
33 DiscardServerHandler handler = new DiscardServerHandler();
34 ChannelPipeline pipeline = bootstrap.getPipeline();
35 pipeline.addLast("handler", handler);
36
37 bootstrap.setOption("child.tcpNoDelay", true);
38 bootstrap.setOption("child.keepAlive", true);
39
40 bootstrap.bind(new InetSocketAddress(8080));
41 }
42 }
代码说明
1)ChannelFactory 是一个创建和管理 Channel 通道及其相关资源的工厂接口,它处理所有的 I/O 请求
并产生相应的 I/O ChannelEvent 通道事件。Netty 提供了多种 ChannelFactory 实现。这里我们需要
实现一个服务端的例子,因此我们使用 NioServerSocketChannelFactory 实现。另一件需要注意的事
情是这个工厂并自己不负责创建 I/O 线程。你应当在其构造器中指定该工厂使用的线程池,这样做的好
处是你获得了更高的控制力来管理你的应用环境中使用的线程,例如一个包含了安全管理的应用服务。
2)ServerBootstrap 是一个设置服务的帮助类。你甚至可以在这个服务中直接设置一个 Channel 通道。
然而请注意,这是一个繁琐的过程,大多数情况下并不需要这样做。
3)这里,我们将 DiscardServerHandler 处理器添加至默认的 ChannelPipeline 通道。任何时候当服务
器接收到一个新的连接,一个新的 ChannelPipeline 管道对象将被创建,并且所有在这里添加的
ChannelHandler 对象将被添加至这个新的 ChannelPipeline 管道对象。这很像是一种浅拷贝操作(a
shallow-copy operation);所有的 Channel 通道以及其对应的 ChannelPipeline 实例将分享相同的
DiscardServerHandler 实例。
4)你也可以设置我们在这里指定的这个通道实现的配置参数。我们正在写的是一个 TCP/IP 服务,因此
我们运行设定一些 socket 选项,例如 tcpNoDelay 和 keepAlive。请注意我们在配置选项里添加的
"child."前缀。这意味着这个配置项仅适用于我们接收到的通道实例,而不是 ServerSocketChannel 实
例。因此,你可以这样给一个 ServerSocketChannel 设定参数:
bootstrap.setOption("reuseAddress", true);
剩余25页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1899
- 资源: 3860
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功