设置cpp-httplib 服务器模式模式下的线程池大小 以及如何增加默认处理函数 以便能够实现http请求转发

news2024/11/24 1:29:29

先说说默认的创建的线程池数量 

原因是某天调试在gdb调试下 一启动程序发现 开启了好多线程 如下图

因为我们程序 没几个线程 数了下 居然有60多个线程 

不需要那么多 所以看下 httplib的源码

 构造函数的时候 设置了最大线程池数量 看下这个宏

 然后打印了下 发现

 

居然那么大  后来 cat /proc/cpuinfo 

 果真有 64个线程数

查了下这个cpu型号

 32线程  后来发现 这个服务器有两块cpu 难怪 

直接修改这个宏的值就可以了 

我改为 2  再GDB跑一下程序 发现 就ok了 

 

httplib中需要为每一个uri增加一个handler

如果没有的话就会返回false未处理 

但是如果设想如果有这么一种需求 需要转发这个http消息 

这个时候就没法处理了吧  毕竟我们不知道 别人会把uri写成什么样子 

httplib默认没办法处理这种情况  

通过 阅读httplib源码 发现 给程序增加一个默认处理函数即可

如下图 routing函数里面 会走到dispath_request函数 然后去get_handlers_ 或者post_handlers_

这个handler通过查看定义实际上是一个vector

服务端刚起来的时候我们设置的 各种处理就是保存到 这个handler里面

然后当客户端有请求的时候 去 这个vector里面去找  如下

默认的方式如下 通过正则表达式匹配字符串  我们只需要增加找不到的时候 都给他重定向到默认的handler

 修改为如下方式

当然程序中得增加这个/默认的处理hanndler

 

然后 我们在浏览器中随便输入一个get请求

或者用postman模拟一个post请求

程序中打印如下

 

这样如果我们想做转发的话 就可以直接在 这个默认的handler里 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FusionCompute安装和配置步骤

1. 先去华为官网下载FusionCompute的镜像 下载地址:https://support.huawei.com/enterprise/zh/distributed-storage/fusioncompute-pid-8576912/software/251713663?idAbsPathfixnode01%7C22658044%7C7919788%7C9856606%7C21462752%7C8576912 下载后放在D盘中&am…

【rabbitmq 实现延迟消息-插件版本安装(docker环境)】

一:插件简介 在rabbitmq 3.5.7及以上的版本提供了一个插件(rabbitmq-delayed-message-exchange)来实现延迟队列功能。同时插件依赖Erlang/OPT 18.0及以上。 二:插件安装 1:选择适合自己安装mq 版本的插件&#xff1…

设计模式---抽象工厂模式

目录 1 介绍 2 优缺点 3 实现 1 介绍 抽象工厂模式(Abstract Factory Pattern) 是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负…

ROC和AUC

目录 ROC AUC ROC ROC曲线是Receiver Operating Characteristic Curve的简称,中文名为"受试者工作特征曲线"。ROC曲线的横坐标为假阳性率(False Postive Rate, FPR);纵坐标为真阳性率(True Positive Rate, TPR).FPR和TPR的计算方法分别为 F…

Spring——案例-业务层接口执行效率和AOP通知获取数据+AOP总结

执行时间获取:记录开始时间和结束时间,取差值。 这里使用环绕通知来实现。 环境准备: 项目文件结构: 业务层接口和实现类: 数据层: 采用mybatis注解开发,这里没有实现类,直接在接口方法里面实现映射。 domain层: 实现了数据库里面每一个…

Altium designer--软件简介及安装教程(Altium designer16)

一、软件介绍(完整安装包资源见文末链接,含破解license) Altium Designer 是一款简单易用、原生3D设计增强的一体化设计环境,结合了原理图、ECAD库、规则和限制条件、BoM、供应链管理、ECO流程和世界一流的PCB设计工具。通过原理…

Baumer工业相机中曝光与增益两种功能的优点和作用以及使用方法

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有…

[NOIP2009 提高组] 最优贸易(C++,tarjan,topo,DP)

题目描述 $C 国有国有国有 n 个大城市和个大城市和个大城市和 m$ 条道路,每条道路连接这 nnn个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 mmm 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的…

OpenHarmony通过MQTT连接 “改版后的华为IoT平台”

一、前言 本篇文章我们使用的是BearPi-HM_Nano开发板:小熊派的主板+E53_IA1扩展板 源码用的是D6_iot_cloud_oc,点击下载BearPi-HM_Nano全量源码 那么为什么要写这篇呢? 前段时间看到OpenHarmony群里,经常有小伙伴问接入华为IoT平台的问题,他们无法正常连接到华为IoT平台等…

【数据结构】二叉树相关OJ题

文章目录一、单值二叉树二、检查两颗树是否相同三、判断一棵树是否为另一颗树的子树四、对称二叉树五、二叉树的前序遍历六、二叉树中序遍历七、二叉树的后序遍历八、二叉树的构建及遍历一、单值二叉树 单值二叉树 题目描述 如果二叉树每个节点都具有相同的值,那…

【互联网架构】聊一聊所谓的“跨语言、跨平台“

文章目录序跨语言跨平台【饭后杂谈】为什么有人说Java的跨平台很鸡肋?序 很多技术都具有跨语言、跨平台的特点 比如JSON是跨语言的、Java是跨平台的、UniAPP、Electron是跨平台的 跨语言和跨平台,是比较重要的一个特性。这些特性经常能够决定开发者是否…

软件测试项目实战,一比一还原可以写进简历的

项目一:ShopNC商城 项目概况: ShopNC商城是一个电子商务B2C电商平台系统,功能强大,安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城,系统PC后台是基于ThinkPHP MVC构架开发的跨…

ubuntu-22.04.2网络配置和root登录和root远程ssh登录

配置网络: 1.查看网卡名称 ip addr(ifconfig 无法使用,需要后期安装) 2. 配置静态IP (1)进入网络配置文件: vim /etc/netplan/00-installer-config.yaml (2)按一下 i ,进入插入模式&#…

网络 | 数据链路层讲解 | MAC帧与APR协议

最大以太网帧大小指的是以太网帧从目的地址到冗余校验的总字节数。在802.3标准里,规定了一个以太网帧的数据部分(Payload)的最大长度是1500个字节,这个数也是MTU。在这个限制之下,最长的以太网帧包括6字节的目的地址(DMAC)、6字节的源地址(SM…

【C++】list的模拟实现

文章目录1.list 底层2. list的模拟实现1. list_node 类设计2. list类如何调用类型3 .push_back(正常实现)4. 迭代器的实现第一个模板参数Tconst迭代器第二个模板参数Ref第三个模板参数Ptr对list封装的理解5. insert6.push_back与 push_front(复用)7. erase8. pop_back与pop_fro…

[c++]list模拟实现

目录 前言: 学习类的方式: 1 类成员变量 1.1 list成员变量 1.2 结点结构体变量 1.3 迭代器成员变量 2 默认函数——构造 2.1 结点结构体构造函数 2.2 list构造函数 2.3 迭代器构造函数 3 迭代器实现 3.1 list部分 3.2 迭代器结构体部分 3.2…

Spring MVC程序开发(三大功能)

文章目录一、什么是Spring MVC?1.MVC定义2.MVC与Spring MVC的关系3.创建方式二、Spring MVC的核心功能1.连接功能浏览器获取前端接口和后端程序连接功能实现get和post的区别Spring Boot热部署2.获取参数(1)传递单个参数(2)传递对…

信捷 XDH Ethercat A_MOVER指令

本指令以相对位置运动 如果当前位置在p点,执行本A_MOVER指令结束后,相对p点前移或后退一段距离,这个距离需要在指令里指定。每次执行A_MOVER都是执行前的当前位置为参考点,只要目标位置不为0,都会运动。上图中&#xf…

MyBatis-1:基础概念+环境配置

什么是MyBatis?MyBatis是一款优秀的持久层框架,支持自定义sql,存储过程以及高级映射。MyBatis就是可以让我们更加简单的实现程序和数据库之间进行交互的一个工具。可以让我们更加简单的操作和读取数据库的内容。MyBatis的官网:htt…

弱监督实例分割 Box-supervised Instance Segmentation with Level Set Evolution 论文笔记

弱监督实例分割 Box-supervised Instance Segmentation with Level Set Evolution 论文笔记一、Abstract二、引言三、相关工作3.1 基于 Box 的实例分割3.2 基于层级的分割四、提出的方法4.1 图像分割中的层级模型4.2 基于 Box 的实例分割在 Bounding Box 内的层级进化输入的数据…