网络编程模型框架netty(一)

1.介绍

netty是一个基于java nio的网络通信框架。Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来使开发网络应用程序,这种新的方式使得它很容易使用和有很强的扩展性。Netty的内部实现时很复杂的,但是Netty提供了简单易用的api从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现的,所以整个Netty都是异步的。网络应用程序通常需要有较高的可扩展性,无论是Netty还是其他的基于Java NIO的框架,都会提供可扩展性的解决方案。Netty中一个关键组成部分是它的异步特性.

2.知识点记录

2.1 netty中handle的执行顺序

Handler在netty中,占据着非常重要的地位,Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的编码解码,拦截指定的报文,统一对错误进行处理,统一对请求进行计数,控制handler执行与否.Netty中的所有handler都实现自ChannelHandler接口,按照输入输出来分,分为两大类:

ChannelInBoundHandler对接收到的报文进行处理,一般用来执行解码,读取数据,进行业务处理等。

ChannelOutBoundHandler对发出去的报文进行处理,一般用来进行解码,发送报文到对端。

Netty中可以注册多个handler,ChannelInBoundHandler按照注册的先后顺序执行, ChannelOutBoundHandler按照注册的先后逆序执行。

2.2 在使用的过程中需要注意

channelinboundhandler之间的传递,通过调用ctx.fireChannelRead(msg)实现,调用ctx.write(msg)将传递到ChannelOutBoundHandler.

ctx.write()方法执行之后,需要调用flush()方法才能另它立即生效。

使用ctx.write(msg)传递消息,Inbound需要放在结尾,在Outbound之后,不然outboundhandler会不执行; 但是使用channel.write(msg)、pipline.write(msg)情况会不一致,都会执行,那是因为channel和pipline会贯穿整个流。

如果使用addlast方法来组装handler,则为以下执行顺序,注册两个InboundHandler,执行顺序为注册顺序,所以应该是InboundHandler1 InboundHandler2。 注册两个OutboundHandler,执行顺序为注册顺序的逆序,所以应该是OutboundHandler2 OutboundHandler1 。

2.3 netty中,通讯的双方建立连接后,会把数据按照Bytebuf的方式进行传输,例如 http协议中,就是通过HttpRequestDecoder对Bytebuf数据流进行处理,转换成http对象,基于这个思路定义了一种通讯协议,server和client端直接传输java对象。实现的原理是通过encoder把java对象转换 Bytebuf流进行传输,通过decoder把Bytebuf转换成java对象进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值