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请求流程
1、HttpServerOperations --> 判断处理请求msg是HttpRequestHtpp。
2、HttpServerHandle --> 调用 ReactorHttpHandlerAdapter。
3、ReactorHttpHandlerAdapter --> 调用 HttpWebHandlerAdapter。
请求传递
1、Reactor 中请求会先执行WebFilter的实现类,再执行WebHandler的实现类。
2、HealthFilter 判断是否为健康检查,FileSizeFilter判断ContentType为form-data取出body。
3、执行SoulWebHandler 调用Soul对应的插件。
本文是Soul网关源码学习的第五篇,介绍了soul-web处理流程。soul-web基于webflux用Netty作应用服务器,Netty事件分inbound和outbound。还介绍了ChannelOperationsHandler,它继承ChannelInboundHandlerAdapter。此外,说明了Netty请求流程和请求传递过程,请求会经WebFilter和WebHandler,最终调用Soul插件。
3100

被折叠的 条评论
为什么被折叠?



