Netty In Action 读书笔记 - 第二章 第一个Netty应用

来源:互联网 发布:内师大网络技术学院 编辑:程序博客网 时间:2024/06/12 01:29
本章包括:
1、获取最新的Netty版本;
2、配置必要的环境来构建、运行Netty示例;
3、创建Netty服务器和客户端;
4、拦截并处理错误;
5、构建并运行Netty服务器和客户端;

设置开发环境
下载安装JDK/JRE,下载安装Apache Maven,略。

写一个EchoServer
包括两个主要部分:
1、Bootstrapping - 定义服务器的特性,如线程处理和端口;
2、实现ServerHandler - 构造包含业务逻辑的组件,用来决定连接建立和接收到数据后该做怎样的处理;

EchoServer代码略,流程描述:
1、设定服务器;
2、指明NIO传输,指明本地socket地址、端口;
3、向channel pipeline添加handler;
4、绑定server,等待server关闭,最终释放资源;

重点:
1、创建ServerBootstrap实例来设定服务器,并在稍后将其绑定到端口,监听连接请求;
2、创建并分配NioEventLoopGroup实例,用以事件处理,如接受新的连接请求,接收数据,写数据等等;
3、指明服务器要绑定的本地InetSocketAddress地址;
4、设置childHandler,处理每个接受到的连接;
5、在配置完成后,调用ServerBootstrap.bind()方法来绑定服务器;

Serverhandler代码略,流程描述:
1、@Sharable注解,在channels间共享handler;
2、将读到的数据写回,注意,此时并没有将数据flush到对端,而是写入缓冲区;
3、将数据flush到对端,并在操作完成后关闭channel;
4、记录错误信息;
5、在发生错误时关闭channel;

Netty使用channel handlers来达成对关联因素(网络环境、OS等)间更细的隔离,使得涉及业务逻辑的添加、修改、删除变得容易。
Handler的职能很明确,它的每个方法都可以被重写,由此可以在数据的一部分生命周期中添加“钩子”,除了channelRead方法是必须被重写的。

拦截异常
至少要有一个ChannelHandler实现exceptionCaught方法。

写一个EchoClient
1、连接到Server;
2、写数据;
3、等待并接收从服务器返回的一致的数据;
4、关闭连接;

代码略,流程描述:
1、为客户端创建Bootstrap;
2、指明NioEventLoopGroup来处理客户端事件,此时应当选择NIO传输模式;
3、指明channel类型,为NIO传输模式选择正确的类型;
4、设定客户端需要连接的InetSocketAddress;
5、通过ChannelInitializer指明ChannelHandler,在连接建立/创建channel时调用一次;
6、将EchoClientHandler添加到channel的pipeline中,pipieline持有channel的所有handler;
7、连接客户端到服务器,等待直到sync()方法完成连接;
8、等待直到客户端channel关闭,这是一个阻塞操作;
9、关闭Bootstrap和线程池,释放资源;

注:Client和Server可以选择不同的传输类型;

重点:
1、创建Bootstrap实例来设定客户端;
2、创建并分配NioEventLoopGroup实例,用以事件处理,如创建新的连接,接受数据,写数据等;
3、指明客户端将要连接的InetAddress地址;
4、设置handler,它将在连接建立后被执行;
5、在配置完成后,调用ServerBootstrap.connect()方法来连接远端服务器;

channelActive() - 连接建立后被调用;
channelRead0() - 接收到数据后被调用,数据在传输过程中可能被分段,这意味着可能一次读取不到全部的数据,唯一可以保证的是数据会按照发送的顺序被接收,但这仅是对TCP或其他面向流的协议而言。

编译运行
略。



0 0
原创粉丝点击