【c++】web框架:pistache
https://pistacheio.github.io/pistache/docs/
https://blog.csdn.net/zhizhengguan/article/details/116116644
不是head-only库
常用响应码
- 正确时
response.send(Http::Code::Ok, ss.str());
- 查表为空时
response.send(Http::Code::No_Content, string("e_tunnel_locInfo为空..").c_str());
- 发生异常时
catch (const std::exception &e)
{
response.send(Http::Code::Expectation_Failed, e.what());
}
基于 Pistache 库的 HTTP 服务器配置,在指定端口上,启动http服务器
if (hzi::config.enable_http) {
cout << "http enabled\n";
std::thread(start_http_server).join();//在指定端口上启动http服务,函数位置:web/http_server.cpp
} else {
cout << "http disabled\n";
// 仅采集时启动中继置参服务
std::thread(sse::startConfRelayer).detach();
std::thread(sse::startSSERelayer).join();
}
//routes.hpp
#ifndef ROUTES_HPP
#define ROUTES_HPP
#undef TRY
#include <pistache/endpoint.h>
#include <pistache/router.h>
using namespace Pistache;
using namespace Rest;
class RoutesManager : public Http::Endpoint
{
Rest::Router router;
public:
RoutesManager(Address addr);
};
#endif
//routes.cpp
#include "routes.hpp"
RoutesManager::RoutesManager(Address addr) : Http::Endpoint(addr)
{
//接口
Routes::Get(RoutesManager::router, "/firstChnNO",Routes::bind(&ms_comm::getFirstChnNO));
...
setHandler(router.handler());
}
//ms_commands.cpp
//存放接口回调函数
namespace ms_comm
{
void getFirstChnNO(const Rest::Request &request,
Http::ResponseWriter response)
{
try
{
response.headers().add<Http::Header::ContentType>(
"text/plain; charset='utf-8'");
response.send(Http::Code::Ok, to_string(hzi::firstChnNO).c_str());
}
catch (const std::exception &e)
{
response.send(Http::Code::Bad_Request, e.what());
}
}
}
//http_server.hpp
#ifndef HTTP_SERVER_HPP
#define HTTP_SERVER_HPP
#include "routes.hpp"
void start_http_server();
#endif
//http_server.cpp
#include "../Config.hpp"
#include "../common.hpp"
#undef TRY
#include "http_server.hpp"
void start_http_server() {
RoutesManager app({Ipv4::any(), hzi::config.httpPort});//监听所有网卡,端口号config.httpPort
logInfo("端口"+std::to_string(hzi::config.httpPort)+"上HTTP服务已启动");
unsigned int nCores = std::thread::hardware_concurrency();//std::thread::hardware_concurrency() 获取系统支持的硬件线程数
auto opts = Pistache::Http::Endpoint::options()//创建一个配置对象,用于设置服务器选项
.maxRequestSize(1024 * 1024 * 5)//设置最大请求数量
.threads(nCores/2)//设置服务器使用的线程数为系统硬件线程数的一半。
.flags(Pistache::Tcp::Options::ReuseAddr);//设置套接字选项为 ReuseAddr,允许重新使用本地地址。
app.init(opts);
app.useSSL("etc/cert/xxx.pem",
"etc/cert/xxx.key");//useSSL 方法用于配置服务器的 SSL 证书和密钥文件路径,启用 HTTPS 支持。
app.serve();//启动http服务器,开始监听客户端请求

浙公网安备 33010602011771号