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

原因是某天调试在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里 

GitHub 加速计划 / cp / cpp-httplib
9
4
下载
A C++ header-only HTTP/HTTPS server and client library
最近提交(Master分支:2 个月前 )
ed0719f2 - 4 个月前
6a848b1a TLS 1. is deprecated: https://www.ietf.org/rfc/rfc8996.html 4 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐