一、HTTP服务
- 实例要求:使用IDEA创建Netty项目
- Netty 服务器在7000端口监听,浏览器发出请求”http://loclalhost:6668/ “
- 服务器可以回复消息给客户端 “Hello!我是服务器 5”,并对特定请求资源进行过滤。
- 目的:Netty可以做Http服务开发,并且理解Handler实例和客户端及其请求的关系。


遇到的问题:
1、编码UTF8乱码,改为UTF16即可
2、TestServer返回2次请求。
原因是请求了favicon:
解决方法:

Http协议用完就断掉,每次刷新都是不同的pipeline
二、Netty核心模块
- Bootstrap、ServerBootstrap
1、Bootstrap意思是引导,一个Netty 应用通常由-一个Bootstrap 开始,主要作用是配置整个Netty 程序,串联各个组件,Netty 中Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类
2、常见的方法
- Future和ChannelFuture
Netty中所有的I0操作都是异步的,不能立刻得知消息是否被正确处理。但是可以过一会等它执行完成或
者直接注册一个监听,具体的实现就是通过Future 和ChannelFutures, 他们可以注册一个监听,当操作执行成功
或失败时监听会自动触发注册的监听事件。
常见的方法有
1、Channel channel(),返回当前正在进行I0操作的通道
2、ChannelFuture sync(),等待异步操作执行完毕
- Channel

- Selector

- ChannelHandler

- Pipeline 和ChannelPipeline
ChannelPipeline是一个重点:
1) ChannelPipeline 是一个Handler 的集合,它负责处理和拦截inbound 或者outbound 的事件和操作,相当于一个贯穿Netty的链。(也可以这样理解: ChannelPipeline 是保存ChannelHandler 的List, 用于处理或拦截Channel的入站事件和出站操作)
2) ChannelPipeline 实现了一种高级形式的拦截过滤器模式,使用户可以完全控制事件的处理方式,以及Channel中各个的ChannelHandler 如何相互交互
3)在Netty 中每个Channel 都有且仅有一个ChannelPipeline 与之对应,它们的组成关系如下



4)常用方法
ChannelPipeline addFirst(ChannelHandler.. handlers),把一个业务处理类(handler) 添加到链中的第一个位置
ChannelPipeline addL ast(ChannelHandler.. handlers),把一一个业 务处理类(handler) 添加到链中的最后一 个位置
- ChannelHandlerContext
1) 保存Channel 相关的所有上下文信息,同时关联一个ChannelHandler 对象。
2)即ChannelHandlerContext 中包含一个具体的事件处理器ChannelHandler,同时ChannelHandlerContext中也绑定了对应的pipeline 和Channel 的信息,方便对ChannelHandler 进行调用。
3)常用方法 
- ChannelOption
1) Netty 在创建Channel 实例后,一 般都需要设置ChannelOption 参数。
2) ChannelOption 参数如下:
- EventLoopGroup 和其实现类 NioEventLoopGroup
1) EventLoopGroup 是一组 EventLoop 的抽象,Netty 为了更好的利用多核 CPU 资源,一般会有多个 EventLoop 同时工作,每个 EventLoop 维护着一个 Selector 实例。
2) EventLoopGroup 提供 next 接口,可以从组里面按照一定规则获取其中一个 EventLoop来处理任务。在 Netty 服务器端编程中,我们一般都需要提供两个 EventLoopGroup,例如:BossEventLoopGroup 和 WorkerEventLoopGroup。 
3)通常一个服务端口即一个 ServerSocketChannel对应一个Selector 和一个EventLoop线程。BossEventLoop 负责接收客户端的连接并将 SocketChannel 交给 WorkerEventLoopGroup 来进行 IO 处理,如下图所示:

- Unpooled 类
Netty 提供一个专门用来操作缓冲区(即Netty的数据容器)的工具类
常用方法如下所示:
用法:

三、Netty——群聊系统
- 实例要求:
编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞) 实现多人群聊
服务器端:可以监测用户上线,离线,并实现消息转发功能
客户端:通过channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)
目的:进一步理解Netty非阻塞网络编程机制
- 在此基础上实现私聊的思路

四、Netty心跳机制
- 实例要求
- 编写一个 Netty心跳检测机制案例,
- 当服务器超过3秒没有读时,就提示读空闲
- 当服务器超过5秒没有写操作时,就提示写空闲 实现
- 当服务器超过7秒没有读或者写操作时,就提示读写空闲


问题:不停地发送心跳包


