【sylar】框架篇-Chapter18-HttpServlet 模块

本文档详细介绍了使用C++从零开始构建的sylar高性能分布式服务器框架,涵盖HTTPServlet模块,包括Servlet、FunctionServlet、NotFoundServlet等核心组件。ServletDispatch作为Servlet分发器,实现了HTTP请求的精准和模糊匹配。此外,还提供了基于模板的ServletCreator,便于创建不同类型的Servlet。框架使用了标准库如`<unordered_map>`、`<functional>`等,并实现了基于锁的并发控制。

站在巨人的肩膀上

C++高性能分布式服务器框架

从零开始重写sylar C++高性能分布式服务器框架

概述

  • HTTPServlet 模块。
  • 提供 HTTP 请求路径到处理类的映射,用于规范化的 HTTP 消息处理流程。
  • HTTP Servlet 包括两部分,第一部分是 Servlet 对象,每个 Servlet 对象表示一种处理 HTTP 消息的方法;第二部分是 ServletDispatch,它包含一个请求路径到 Servlet 对象的映射,用于指定一个请求路径该用哪个 Servlet 来处理。

Servlet

  • 纯虚基类,子类必须重写其虚方法 handleClient。

FunctionServlet

  • 函数式 Servlet。
  • 继承自 Servlet。
  • 内含回调函数,其 handleClient 方法其实是直接调用回调函数。

NotFoundServlet

  • ServletDispatch 默认的 Servlet,404 那种。
  • 继承自 Servlet。

IServletCreator

  • 纯虚基类,子类必须重写其 get() 和 getName() 方法。

HoldServletCreator

  • 继承自 IServletCreator。

ServletCreator

  • 继承自 IServletCreator。
  • 模板类,根据类型创建 Servlet。

ServletDispatch

  • Servlet 分发器。
  • 继承自 Servlet。
  • 内含精准匹配的 Servlet map 和 模糊匹配的 Servlet vector,并提供增、删、查方法。

部分相关代码

/**
 * @filename    servlet.h
 * @brief   Servlet 模块
 * @author  L-ge
 * @version 0.1
 * @modify  2022-07-16
 */
#ifndef __SYLAR_HTTP_SERVLET_H__
#define __SYLAR_HTTP_SERVLET_H__

#include <memory>
#include <functional>
#include <string>
#include <vector>
#include <unordered_map>
#include "http.h"
#include "http_session.h"
#include "sylar/mutex.h"
#include "sylar/util.h"

namespace sylar
{

namespace http
{

/**
 * @brief   Servlet封装
 */
class Servlet
{
public:
    typedef std::shared_ptr<Servlet> ptr;

    Servlet(const std::string& name)
        : m_name(name)
    {}
    virtual ~Servlet() {}

    /**
     * @brief   处理请求
     *
     * @param   request http请求
     * @param   rsponse http响应
     * @param   session http连接
     *
     * @return  是否处理成功
     */
    virtual int32_t handle(sylar::http::HttpRequest::ptr request
                         , sylar::http::HttpResponse::ptr response
                         , sylar::http::HttpSession::ptr session) = 0;

    const std::string& getNa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值