当前位置: 首页 > 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.cppint run()
{boost::asio::io_context& io = getIoContext();App app;...
}
//include\io_context_singleton.hppinline 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.hppnamespace 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.mrgr.cn/news/91921.html

相关文章:

  • 【Linux】HTTP:Cookie 和 Session 详解
  • PySide6学习专栏(四):用多线程完成复杂计算任务
  • 在windows下安装windows+Ubuntu16.04双系统(上)
  • 计算机网络之物理层——基于《计算机网络》谢希仁第八版
  • seacmsv9 SQL注入漏洞(报错注入)
  • react hook useReducer
  • LeetCode 501.二叉搜索树中的众数
  • uniapp h5端和app端 使用 turn.js
  • Spring面试题2
  • 【Linux网络】认识协议(TCP/UDP)、Mac/IP地址和端口号、网络字节序、socket套接字
  • 计算机网络面试知识点总结
  • CUDA跟Nvidia适配处理
  • c++:stack与deque
  • UE5中按钮圆角,设置边框
  • Navicat17详细安装教程(附最新版本安装包和补丁)2025最详细图文教程安装手册
  • 刺客信条 枭雄 画质设置以及【锁帧60帧】的办法
  • stm32单片机个人学习笔记16(SPI通信协议)
  • Web 自动化测试提速利器:Aqua 的 Web Inspector (检查器)使用详解
  • 安装可视化jar包部署平台JarManage
  • vue2.x 中父组件通过props向子组件传递数据详细解读