设置cpp-httplib 服务器模式模式下的线程池大小 以及如何增加默认处理函数 以便能够实现http请求转发
先说说默认的创建的线程池数量
原因是某天调试在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里
更多推荐
所有评论(0)