当前位置: 首页 > 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 onlyHTTP,  // Socket supports HTTP onlyBOTH   // 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.lryc.cn/news/541128.html

相关文章:

  • hot100_74. 搜索二维矩阵
  • 光明谷推出AT指令版本的蓝牙音箱SOC 开启便捷智能音频开发新体验
  • 基于windows的docker-desktop安装kubenetes以及dashboard
  • MT7628基于原厂的SDK包, 修改ra1网卡的MAC方法。
  • 网络安全第三次练习
  • BFS 和 DFS(深度优先搜索、广度优先搜索)
  • Casbin 权限管理介绍及在 Go 语言中的使用入门
  • Two Sum
  • 3.3.2 交易体系构建——缠论操作思路
  • [SQL] 事务的四大特性(ACID)
  • 使用 Three.js 实现流光特效
  • Error [ERR_REQUIRE_ESM]: require() of ES Module
  • 沉浸式翻译插件深度评测:打破语言壁垒的黑科技利器
  • Java 中 HTTP 协议版本使用情况剖析
  • 蓝桥杯学习大纲
  • VSCode ssh远程连接内网服务器(不能上网的内网环境的Linux服务器)的终极解决方案
  • 【多模态处理篇五】【DeepSeek文档解析:PDF/Word智能处理引擎】
  • STM32-心知天气项目
  • cs106x-lecture14(Autumn 2017)-SPL实现
  • 基于STM32的智能家居语音系统(单片机毕设)
  • ASP.NET Core 简单文件上传
  • 2502C++,C++继承的多态性
  • 【机器学习】13.十大算法之一K均值算法(K-means)聚类详细讲解
  • Spring扩展点之Mybatis整合模拟
  • .NET MVC实现电影票管理
  • 自媒体账号管理工具:创作罐头使用指南
  • 基于数据可视化+SpringBoot+安卓端的数字化OA公司管理平台设计和实现
  • VSCode离线安装插件
  • 基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】
  • SHELL32!Shell_MergeMenus函数分析