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

OpenBMC:BmcWeb实例化App

BmcWeb是OpenBMC的一个核心模块,对外负责响应Redfish请求,并且由于OpenBMC的Web使用的Redfish api,所以BmcWeb也是Web的后台。

1.main函数

//src\webserver_main.cpp
#include "webserver_run.hpp"

int main(int /*argc*/, char** /*argv*/) noexcept(false)
{
    return run();
}

2.main函数调用的run函数

//src\webserver_run.cpp

int run()
{
    boost::asio::io_context& io = getIoContext();
    App app;
    ...
}
//include\io_context_singleton.hpp

inline boost::asio::io_context& getIoContext()
{
    static boost::asio::io_context io;
    return io;
}

这里getIoContext相当于一个单例模式,用于产生一个io对象

然后实例化app对象

 3.App类

//http\app.hpp
namespace crow
{
class App
{
  public:
    using raw_socket_t = boost::asio::ip::tcp::socket;
    using server_type = Server<App, raw_socket_t>;
    
    ...

    std::optional<server_type> server;

    };
} // namespace crow
using App = crow::App;

 App这个类里面有一optional<server_type>类型的对象server

在实例化app对象时,目前还没有真正的实例化serrver对象

 4.Server类

//http\http_server.hpp

namespace crow
{

struct Acceptor
{
    boost::asio::ip::tcp::acceptor acceptor;
    HttpType httpType;
};

template <typename Handler, typename Adaptor = boost::asio::ip::tcp::socket>
class Server
{
    using self_t = Server<Handler, Adaptor>;

  public:
    Server(Handler* handlerIn, std::vector<Acceptor>&& acceptorsIn) :
        acceptors(std::move(acceptorsIn)),

        // NOLINTNEXTLINE(misc-include-cleaner)
        signals(getIoContext(), SIGINT, SIGTERM, SIGHUP), handler(handlerIn)
    {}

    ...

  private:
    boost::asio::signal_set signals;
    Handler* handler;
    
};
} // namespace crow

Server类是个模版类,类的实例化传入了App和boost::asio::ip::tcp::socket两个模版参数

其中App类作为Handler的模版实参,用于定义一个反向指回App类的handler类指针

构造函数的std::vector<Acceptor>&& acceptorsIn参数后续再进行解释

signals设置了进程响应的几个信号

相关文章:

  • 非常简洁的一个 Excel 导出封装,生成多个 Excel 文件并打包成 zip 通过浏览器下载
  • python小项目编程-中级(1、图像处理)
  • 【蓝桥杯集训·每日一题2025】 AcWing 6118. 蛋糕游戏 python
  • 欧洲跨境组网专线:企业出海的高效网络解决方案
  • Python(二十二)实现各大跨境船公司物流查询CMA船司物流查询
  • DeepSeek技术演进史:从MoE到当前架构
  • npm/pnpm软链接
  • Spring中Aware的用法以及实现
  • hive—常用的函数整理
  • AI学习指南DeepSeek篇(6)-DeepSeek论文介绍
  • 目标检测中单阶段检测模型与双阶段检测模型详细对比与说明
  • Python 3 中 快速排序 和 归并排序
  • matlab和java混合编程经验分享
  • 迅为RK3568开发板篇Openharmony配置HDF控制UART-实操-HDF驱动配置UART-修改HCS配置
  • Python logger模块
  • 路由器的WAN口和LAN口有什么区别?
  • 1.14作业
  • 动态存储斐波那契数列(递归优化)
  • 基于AVue的二次封装:快速构建后台管理系统的CRUD方案
  • synchronized锁字符串
  • wordpress本地调试慢/湖南正规seo优化
  • 深圳好的网站建设公/google搜索网址
  • wordpress网站数据迁移/seo文章是什么意思
  • 南宁哪个公司做网站建设/网络推广优化平台
  • king 主题WordPress/seo是什么意思
  • xxx网站策划书/百度网站收录查询