原文
cinatra
支持反向代理
很简单,5
行代码就可以了.先看一个简单的示例:
#include "cinatra/coro_http_reverse_proxy.hpp"
using namespace cinatra;
int main() {reverse_proxy proxy_rr(10, 8091);proxy_rr.add_dest_host("127.0.0.1:9001");proxy_rr.add_dest_host("127.0.0.1:9002");proxy_rr.add_dest_host("127.0.0.1:9003");proxy_rr.start_reverse_proxy<GET, POST>("/rr", true, coro_io::load_blance_algorithm::RR);
}
第一步
创建一个代理服务器
,设置其线程数和端口
;第二步添加
需要访问的服务器列表
;第三步启动
代理服务,设置loadbalance
策略,这里选择的是roundrobin
策略.
在浏览器或client
里访问http://127.0.0.1:8091/rr
就会根据RR
策略选择三个
服务器中的一个.
如果要选择random
策略就设置为coro_io::load_blance_algorithm::random
.
如果要选择weightroundrobin
策略,就需要设置服务器权重
.
reverse_proxy proxy_wrr(10, 8090);proxy_wrr.add_dest_host("127.0.0.1:9001", 10);proxy_wrr.add_dest_host("127.0.0.1:9002", 5);proxy_wrr.add_dest_host("127.0.0.1:9003", 5);proxy_wrr.start_reverse_proxy<GET, POST>("/wrr", true, coro_io::load_blance_algorithm::WRR);
在浏览器或client
里访问http://127.0.0.1:8090/wrr
,第一次和第二次
会返回9001
服务器的结果,第三次返回9002
服务器的结果,第四次返回9003
服务器的结果,第五次又重新返回9001
服务器的结果,这就是WRR
的策略.
更多
cinatra
的反向代理是零拷贝
的,代理服务器
会把被代理
服务器的httpcontent
零拷贝的响应
传递给客户
,性能
会更好!