# 《高性能Polaris网关》HTTP处理器-第02节:服务端核心处理器的设计与实现

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本节难度:★★☆☆☆
  • 本节重点:对服务端核心处理器进行设计与实现,深入理解高性能Polaris网关对服务端接收请求的设计与实现。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

在网关的整体架构设计中,在设计通用处理器时,我们设计了BatchEvent模式的缓冲队列和MPMC模式的缓冲队列,为后续设计和实现BatchEvent模式的处理器和MPMC模式的处理器打下了良好的基础。目前,已经实现了在BatchEvent模式缓冲队列的基础上基于自定义SPI扩展实现BatchEvent模式处理器和MPMC模式处理器。在HTTP处理器篇章,我们已经对HTTP处理器的核心接口进行了设计与实现。

# 一、背景

在网关的处理器设计中,我们重点设计和实现了通用处理器接口,基于Netty实现了核心处理器的功能,并且基于BatchEvent和MPMC两种模式实现了缓冲队列。在实现缓冲队列时,重点参考了JDK的队列实现,并且在JDK队列实现的基础上,做了进一步优化。所以,各位小伙伴们在学习自定义缓冲队列时,可以结合JDK的Queue接口及其实现类等深入学习和理解。

目前,已经实现了在BatchEvent模式缓冲队列的基础上基于自定义SPI扩展实现BatchEvent模式处理器和MPMC模式处理器。

在高性能Polaris网关的设计中,整体对外提供HTTP协议、RPC协议和WebSocket协议,也就是说,其他服务或者客户端可以通过HTTP协议、RPC协议和WebSocket协议访问网关。在HTTP处理器篇章,我们已经对HTTP处理器的核心接口进行了设计与实现。接下来,就开始设计和实现服务端的核心处理器。

# 二、本节重点

对服务端核心处理器进行设计与实现,深入理解高性能Polaris网关对服务端接收请求的设计与实现。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

# 三、核心类设计

服务端核心处理器的类图如图2-1所示。


可以看到,服务端核心处理器主要由HttpServerHandler类实现。

注意:这里重点给大家展示HTTP处理器,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

# 四、编码实现

本节,就对服务端核心处理器进行编码实现,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

HttpServerHandler类是服务端核心处理器类,HttpServerHandler类主要基于Netty实现,会继承Netty的ChannelInboundHandlerAdapter类,在构造方法中注入Processor对象。随后在HttpServerHandler类实现的channelRead方法中判断接收到的数据是否是HttpRequest类型,如果是HttpRequest类型,则封装HttpPolarisRequestWrapper对象,调用Processor的process()方法,执行处理器方法,驱动过滤器链的执行。

如果接收的数据类型不是HttpRequest类型,则释放资源。如果释放资源失败,则输出对应的日志。

源码详见:polaris-http工程下的io.binghe.polaris.http.server.handler.HttpServerHandler。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码