Soul网关源码学习05

Soul网关源码学习05

soul-web 处理流程

soul-web基于webflux 可以使用Netty作为应用服务器,EventLoop 可以说是Netty的调度中心,负责事件的监听(I/O事件、信号事件),ChannelPipeline 事件处理链,ChannelHandler事件处理。

相对于ChannelPipeline 而言Netty事件分为两大类 inboud 和 outbound,分别由ChannelInboundHandler 和ChannelOutboundHandler 负责处理,inbound和outbound 指事件类型。

Inbound:事件是由外部触发的,可以认为并非应用程序主动请求而触发的事件,比如请求连接、管道有数据传递。
Outbound:事件是由应用程序主动请求触发的事件,可认为应用程序发起某个操作事件,比如向socket写入数据,从socket读取数据。

ChannelOperationsHandler

ChannelOperationsHandler 被添加到ChannelPipeline,继承 ChannelInboundHandlerAdapter 重写了父类接收请求事件的方法。

final public void channelRead(ChannelHandlerContext ctx, Object msg) {
   if (msg == null || msg == Unpooled.EMPTY_BUFFER || msg instanceof EmptyByteBuf) {
      return;
   }
   try {
      ChannelOperations<?, ?> ops = ChannelOperations.get(ctx.channel());
      if (ops != null) {
         ops.onInboundNext(ctx, msg);
      }
}

事件参数msg 请求的数据,从ChannelOperations中取出对应的 channel 是http,websocket。

Netty请求流程

ChannelPipeline ChannelOperationsHandler HttpServerOperations WebsocketServerOperations HttpServerHandle ReactorHttpHandlerAdapter HttpWebHandlerAdapter channelRead http websocket alt [channel] onStateChange apply handle ChannelPipeline ChannelOperationsHandler HttpServerOperations WebsocketServerOperations HttpServerHandle ReactorHttpHandlerAdapter HttpWebHandlerAdapter

1、HttpServerOperations --> 判断处理请求msg是HttpRequestHtpp。
2、HttpServerHandle --> 调用 ReactorHttpHandlerAdapter。
3、ReactorHttpHandlerAdapter --> 调用 HttpWebHandlerAdapter。

请求传递

HttpWebHandlerAdapter WebHandlerDecorator FilteringWebHandler DefaultWebFilterChain HealthFilter FileSizeFilter SoulWebHandler handle handle handle filter filter handle loop [责任链调用] HttpWebHandlerAdapter WebHandlerDecorator FilteringWebHandler DefaultWebFilterChain HealthFilter FileSizeFilter SoulWebHandler

1、Reactor 中请求会先执行WebFilter的实现类,再执行WebHandler的实现类。
2、HealthFilter 判断是否为健康检查,FileSizeFilter判断ContentType为form-data取出body。
3、执行SoulWebHandler 调用Soul对应的插件。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值