-
Netty-13-单元测试
单元测试的必要性
ChannelHandler 是 Netty 应用程序的关键元素,所以彻底地测试它们应该是你的开发过程的一个标准部分。
最佳实践要求你的测试不仅要能够证明你的实现是正确的,而且还要能够很容易地隔离那些因修改代码而突然出现的问题。这种类型的测试叫作单元测试。
虽然单元测试没有统一的定义,但是大多数的从业者都有基本的共识。其基本思想是,以尽可能小的区块测试你的代码,并且尽...
2017-11-16 11:23:06 |
Netty
-
Netty-12-关闭
关闭
引导使你的应用程序启动并且运行起来,但是迟早你都需要优雅地将它关闭。
当然,你也可以让JVM 在退出时处理好一切,但是这不符合优雅的定义,优雅是指干净地释放资源。
关闭Netty应用程序并没有太多的魔法,但是还是有些事情需要记在心上。
最重要的是,你需要关闭EventLoopGroup,它将处理任何挂起的事件和任务,并且随后释放所有活动的线程。
这就是调用 EventLoop...
2017-11-16 11:23:06 |
Netty
-
Netty-12-ServerBoostrap 服务端
引导服务器
我们将从ServerBootstrap API 的概要视图开始我们对服务器引导过程的概述。
然后,我们将会探讨引导服务器过程中所涉及的几个步骤,以及几个相关的主题,包含从一个ServerChannel 的子Channel 中引导一个客户端这样的特殊情况。
ServerBoostrap 类
名 称 描 述
group 设置ServerBootstrap 要用...
2017-11-16 11:23:06 |
Netty
-
Netty-12-DatagramChannel UDP 无连接协议
引导 DatagramChannel
前面的引导代码示例使用的都是基于TCP 协议的SocketChannel,但是Bootstrap 类也可以被用于无连接的协议。
为此,Netty 提供了各种 DatagramChannel 的实现。
唯一区别就是,不再调用 connect() 方法,而是只调用 bind() 方法,
代码示例
如代码清单8-8 所示。
import io.ne...
2017-11-16 11:23:06 |
Netty
-
Netty-12-ChannelOption
使用 Netty 的 ChannelOption 和属性
在每个 Channel 创建时都手动配置它可能会变得相当乏味。
幸运的是,你不必这样做。相反,你可以使用 option() 方法来将 ChannelOption 应用到引导。
你所提供的值将会被自动应用到引导所创建的所有 Channel。
可用的 ChannelOption 包括了底层连接的详细信息,如 keep-alive ...
2017-11-16 11:23:06 |
Netty
-
Netty-12-ChannelInitializer 引导添加多个 handler
场景
在所有我们展示过的代码示例中,我们都在引导的过程中调用了handler()或者childHandler()方法来添加单个的ChannelHandler。
这对于简单的应用程序来说可能已经足够了,但是它不能满足更加复杂的需求。
例如,一个必须要支持多种协议的应用程序将会有很多的ChannelHandler,而不会是一个庞大而又笨重的类。
正如你经常所看到的一样,你可以根据需要,通...
2017-11-16 11:23:06 |
Netty
-
Netty-12-Boostrap 客户端
引导客户端和无连接协议
Bootstrap 类被用于客户端或者使用了无连接协议的应用程序中。
表8-1 提供了该类的一个概览,其中许多方法都继承自AbstractBootstrap 类。
方法概览
Bootstrap group(EventLoopGroup) 设置用于处理Channel 所有事件的EventLoopGroup
Bootstrap channel(Class&...
2017-11-16 11:23:06 |
Netty
-
Netty-12-Boostrap 引导类 api
前言
算法=控制+逻辑
如果将控制可逻辑分开,那么代码的可维护性就会大幅度提升。
同理如果可以将配置与组件之间分开,就像汽车在生产的时候各个组件分开,最后统一组装,那么灵活性也会大幅度提升。
结构化
在深入地学习了ChannelPipeline、ChannelHandler 和EventLoop 之后,你接下来的问题可能是:
“如何将这些部分组织起来,成为一个可实际运行的应用程...
2017-11-16 11:23:06 |
Netty