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

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设置了进程响应的几个信号


http://www.kler.cn/a/556331.html

相关文章:

  • 清影2.0(AI视频生成)技术浅析(五):音频处理技术
  • AI Agent Service Toolkit:一站式大模型智能体开发套件
  • C++与Python:两种编程语言的区别
  • 【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较
  • windows怎样查看系统信息(处理器等)
  • 2025最新Python机器视觉实战:基于OpenCV与深度学习的多功能工业视觉检测系统(附完整代码)
  • Maven 的高级调试技巧与常见问题
  • 动态存储斐波那契数列(递归优化)
  • Unity游戏制作中的C#基础(2)变量与数据类型
  • Kettle 实战面试题及参考答案(完整版)
  • 【Java基础-46.3】Java泛型通配符详解:解锁类型安全的灵活编程
  • JavaScript如何创建一个对象?对象字面量和构造函数创建对象有什么区别?
  • 【第三节】C++设计模式(创建型模式)-单例模式
  • 通过监督微调提升多语言大语言模型性能
  • 模电知识点总结(5)
  • docker 和 Quay.io的关系
  • 使用 ^= 对每个字节进行异或操作完成校验和
  • Elasticsearch实战应用:从“搜索小白”到“数据侦探”的进阶之路
  • 5分钟下载excel模板
  • 【deepseek】本地部署+RAG知识库挂载+对话测试