Pigeon中的Netty应用

一.Netty与Pigeon交互图

二.关键类解释

2.1 Server

Server是Pigeon对服务器的抽象,每个Server对应一个Netty的服务器,并负责处理该 Netty服 务器接收的所有请求

addService(); 该方法在服务启动流程中已经解释,通过addSerivce添加提供的服务 processRequest 提供处理请求的能力

2.2 NettyServer

NettyServer作为Pigeon服务的入口类,一方面 NettyServer通过继承实现了Server接口的AbstractServer拥有添加service和处理request的能力 ; 另一方面NettyServer通过持有bootstrap对象完成服务器的启动以及相关资源的管理。

ServerBootStrap是Netty提供的服务启动工具类,本质上就是开启了一个socket端口, channelFactory则是传入的channel工厂类。

NettyServerPipelineFactory则是封装Pigeon定制的协议处理流程.在Pipeline中完成了从字节流到request的过程

2.3 NettyServerPipelineFactory

pipeline处理流程

pipeline的模式设计是责任链和事件驱动的融合.

责任链类似于一个filter的过程,单纯的责任链模式要求handler保持单一的处理接口。通过加入事件驱动,就是将数据封装成一个个事件,并且后续handler的调用方法由前一个handler触发的事件决定。

比如handler1 接收到一个event2事件就会调用handleEvent2()方法,处理完成后调用fireEvent3触发一个event3事件,这个事件就会调用后续handler2的handleEvent3方法

三 Pigeon协议

Pigeon的通信协议全部可以在2.3中的handler链条中看到。

FramePrepender    简单的判断,拦截了一些非法的请求
FrameDecoder      完成tcp粘包的处理,以及版本之间的兼容
Crc32Handler      完成了数据完整性的校验
CompressHandler   数据的压缩和解压缩
ProviderDecoder   编码
NettyServerHandler将编码后的请求交给server处理

四.总结

NettyServer通过ServerBootStrap启动一个服务器,服务器每新建一个连接就会通过channelFactory创建一个channel , channel内的数据流经过handler责任链的处理,被序列化成为一个Request对象,在最后一个处理请求的NettyServerHandler中调用NettyServer的processRequest方法,从而完成一个网络请求到Pigeon服务调用的过程

Server的实例需要在handler使用,因此通过Server接口,将Netty相关的部分隔离开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值