当前位置: 首页 > news >正文

OpenBMC:BmcWeb app.run

1.监听用户移除signal

//src\webserver_run.cpp
int run()
{
    ...
    bmcweb::registerUserRemovedSignal();

    ...
}
//include\user_monitor.hpp
inline void onUserRemoved(sdbusplus::message_t& msg)
{
    sdbusplus::message::object_path p;
    msg.read(p);
    std::string username = p.filename();
    persistent_data::SessionStore::getInstance().removeSessionsByUsername(
        username);
}

inline void registerUserRemovedSignal()
{
    std::string userRemovedMatchStr =
        sdbusplus::bus::match::rules::interfacesRemoved(
            "/xyz/openbmc_project/user");

    static sdbusplus::bus::match_t userRemovedMatch(
        *crow::connections::systemBus, userRemovedMatchStr, onUserRemoved);
}

关于注册signal,可以参考

sdbusplus:监听属性的变化_sdbusplus::bus::match::match-CSDN博客

这部分的作用是当发现某个用户被移除后,删除该用户的session

session部分后续再介绍

2.app.run获取socket

//src\webserver_run.cpp
int run()
{
    ...
    app.run();

    systemBus->request_name("xyz.openbmc_project.bmcweb");

    io.run();

    crow::connections::systemBus = nullptr;

    return 0;
}

 其中app.run的定义如下:

//http\app.hpp
void run()
{
    validate();

    std::vector<Acceptor> acceptors = setupSocket();

    server.emplace(this, std::move(acceptors));
    server->run();
}

 validate();是用于检验route,这个后续跟路由一起解释

//http\http_server.hpp
struct Acceptor
{
    boost::asio::ip::tcp::acceptor acceptor;
    HttpType httpType;
};
//http\http_connect_types.hpp
enum class HttpType
{
    HTTPS, // Socket supports HTTPS only
    HTTP,  // Socket supports HTTP only
    BOTH   // Socket supports both HTTPS and HTTP, with HTTP Redirect
};

static std::vector<Acceptor> setupSocket() 的作用是获取socket,这个后续再详细解释

 3.app.run构造server对象

//http\http_server.hpp
template <typename Handler, typename Adaptor = boost::asio::ip::tcp::socket>
class Server
{
public:
    Server(Handler* handlerIn, std::vector<Acceptor>&& acceptorsIn) :
        acceptors(std::move(acceptorsIn)),

        // NOLINTNEXTLINE(misc-include-cleaner)
        signals(getIoContext(), SIGINT, SIGTERM, SIGHUP), handler(handlerIn)
    {}
    ...
private:
    std::vector<Acceptor> acceptors;
    Handler* handler;
}

OpenBMC:BmcWeb实例化App-CSDN博客

介绍了server类,但是当时没有构造server类的实例,

构造server类的实例是在app.run中

server.emplace(this, std::move(acceptors));完成的

将App做为handle传入Server,用于反向指回app对象

将setupSocket()获取的socket也传入了Server,用于后续接受连接请求。

http://www.dtcms.com/a/32119.html

相关文章:

  • tortoiseGit的使用和上传拉取
  • 使用docker开发镜像编译
  • pytest下allure
  • 医院安全(不良)事件上报系统源码,基于Laravel8开发,依托其优雅的语法与强大的扩展能力
  • 更换node版本
  • LLM:Agent
  • 【多模态处理篇四】【DeepSeek跨模态检索:联合嵌入空间构建方案 】
  • Ruby Dir 类和方法详解
  • UE求职Demo开发日志#35、36 搬boss和主线任务自动接逻辑
  • 【3.6JavaScript】JavaScript数组对象
  • Educational Codeforces Round 174 (Rated for Div. 2)(部分题解)
  • Next.js 学习-1
  • 深入解析过滤器模式:数据筛选与处理的高效工具
  • 我们来学人工智能 -- DeepSeek客户端
  • 一文读懂大模型文件后缀名,解锁 AI 世界的密码
  • 【部署优化篇十四】【十万字全景拆解:GitHub Actions自动化流水线设计圣经(DeepSeek工业级实践大公开)】
  • [通俗易懂C++]:指针和const
  • 2025前端框架最新组件解析与实战技巧:Vue与React的革新之路
  • Nuxt配置、环境覆盖、vue组件配置+Animate.css开发文档及元素用法详解
  • AI: IDE Trae创新探讨与Cursor的对比分析
  • Transceivers Wizard IP核
  • Windows和Linux下,通过C++实现获取蓝牙版本号
  • 3D Gaussian Splatting 数学原理与推导
  • 昇腾910B部署满血DeepSeek-R1(可推理版)
  • 国产编辑器EverEdit - 洞察秋毫!内置文件比较功能!
  • 复古怀旧绿色调电影摄影照片调色Lightroom预设 Cinematic Green – Desktop and Mobile Presets
  • 【好玩的工具和命令】 ASCII 艺术生成工具: figlet
  • 041集——选取若干点生成三角网(CAD—C#二次开发入门)
  • 分发糖果(力扣135)
  • Linux 内核 RDMA CM 模块分析:drivers/infiniband/core/cma.c