"一切皆文件"是Linux的设计哲学,在网络编程中也不例外。不管是在服务端还是在客户端,都会调用socket系统调用来创建一个socket虚拟文件,该系统调用返回该文件的fd,后续的操作都会基于该fd。本文就来分析一下在socket系统调用的底层做了哪些事情。

Spring Cloud Gateway是基于Spring WebFlux的,使用了ReactorNetty框架和Netty作为底层服务器的实现。Spring Cloud Gateway和WebFlux的关联点在RoutePredicateHandlerMappingDispatcherHandler会调用它来获取handler方法。本文就以此为入口点来分析Spring Cloud Gateway的请求处理流程。

Spring Boot中HttpHandler的创建过程一文中,介绍到在WebFluxConfigurationSupport类中会向bean工厂中注册DispatcherHandler类型的bean。在创建后Spring会对该bean进行初始化,以满足处理请求的需要。本文就来分析一下初始化过程中做了哪些事情。

其实WebFlux也和WebMvc一样,有一套请求的处理流程,而且两套流程也很相似。都是先获取handler方法,再获取handler适配器,然后通过handler适配器调用handler方法,最后处理结果。本文就来分析一下该过程具体的实现。

Spring Boot在创建Reactive类型的Web服务器时,会从bean工厂中查找HttpHandler类型的bean。在NettyReactiveWebServerFactory的实现中,会利用该bean创建ReactorHttpHandlerAdapter。这个适配器是Spring Framework中提供的类,底层的ReactoryNetty收到请求后,会调用该适配器,而该适配器又会调用设置的HttpHandler来处理请求。

从Servlet容器到我们编写的handler方法,Spring帮我们做了很多事情。比如根据请求URL查找到目标handler方法,参数的类型转换及绑定,调用handler方法,以及返回值写回响应等等操作。本文就来分析一下这个过程中Spring到底帮我们做了哪些事情,以及是怎么做的。

在分析请求的处理流程之前,还是很有必要清楚DispatcherServlet的初始化过程是怎么回事,毕竟这个过程会初始化很多处理请求的组件,不然不知道这些组件是在什么之后以及怎么样被创建的。所以本文以Servlet规范的init方法作为入口,分析一下整个DispatcherServlet的初始化过程。

SpringBoot中的Web容器一文中介绍过Spring Boot在启动过程中会创建Web服务器并启动它。在[ReactorNetty中的HttpServer的创建过程]这篇文章中也介绍了创建的过程,本文就来分析一下其启动过程是怎样的。

在启动过程中分析到,当客户端的请求到来时,会为其设置一个特殊的ReactiveBridge处理器来处理请求,从名称就可以看出来,该处理器是Netty和反应式的桥接器。本文就来分析一下,当新请求到来时,该处理器是怎么处理的。

不管是服务端还是客户端的通道,都会注册到事件循环所关联的通道选择器中。注册到选择器之后,当通道有事件发生时,事件循环会通过选择器获取到这些事件,并相应调用方法来处理。本文来分析一下通道的注册过程。