基于 Netty + Spring 实现一个 HTTP REST 服务器(二) Gevlet模块设计与代码结构

本文介绍了Gevlet的模块设计及代码结构,包括基于Netty的网络组件、服务核心实现、线程池相关模块等。重点阐述了BackendServer模块与ServerContainer容器的功能,以及Gevlet启动流程和服务映射创建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块设计与代码结构

代码地址请移步 github链接

代码结构说明

  • connector 主要是网络相关的组件:基于Netty
  • core 是服务的核心实现
  • executor 线程池相关
  • Bootstract 是启动引导类
  • Gevlet 用于服务生命周期相关

这里写图片描述

模块设计

Gevlet 的模块设计总体上分为处理网络请求的 BackendServer 模块和执行应用的 ServerContainer容器。

BackendServer 可以有不同的网络协议进行实现,比如 HTTP HTTPS TCP/IP 等。最终网络请求将会被映射为统一的 NetMessagetProtocol 请求协议传递给 ServerContainer 进行处理。

ServerContainer 是管理所有应用的全局唯一的容器。在系统启动的时候,Gevlet会加载所有的应用,并将每个应用映射成唯一 的 ServerHandler 保存到容器中,并为每个ServerHandler创建单独的类加载器(ClassLoader)。

这里写图片描述

启动流程

Gevlet 的启动可分为类加载器创建、加载应用资源、创建服务映射、启动网络服务 这四个过程。其中为每个应用创建单独的类加载,和创建服务映射是其中最关键的部分。

  • 创建类加载器:由于Gevlet支持多应用的部署,为了防止多应用部署的情况下保证各个应用的独立性已经防止引用冲突,Gevlet 会为每个应用创建单独的类加载器,并同时启动单独的Spring 容器。
    • 创建服务映射: 创建服务映射的过程其实就是 通过每个应用的Class资源,通过Spring 容器,获取提供服务的对象,并将其与URL 进行映射。

以下是Gevlet 启动的流程图

这里写图片描述

请求处理流程

请求处理部分主要依赖 RequestHandlerAdapter 进行请求参数的处理,并将请求转化为统一的 NetMessagetProtocol 然后转发给容器,容器通过URL映射找到对应应用的 ServerHandler 进行业务处理。

请求处理流程图如下:

这里写图片描述

总结:以上为Gevlet的设计结构,模块设计相对比较简单。不同的是Gevlet并没有为每个应用单独创建线程池,而是整个系统使用一个线程池进行业务处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值