#include <connect_manager.hpp>
|
| connect_manager (void) |
|
virtual | ~connect_manager (void) |
|
void | bind_thread (bool yes) |
|
void | init (const char *default_addr, const char *addr_list, size_t count, int conn_timeout=30, int rw_timeout=30) |
|
void | set (const char *addr, size_t count, int conn_timeout=30, int rw_timeout=30) |
|
const conn_config * | get_config (const char *addr, bool use_first=false) |
|
void | set_retry_inter (int n) |
|
void | set_idle_ttl (time_t ttl) |
|
void | set_check_inter (int n) |
|
void | remove (const char *addr) |
|
connect_pool * | get (const char *addr, bool exclusive=true, bool restore=false) |
|
virtual connect_pool * | peek (void) |
|
virtual connect_pool * | peek (const char *key, bool exclusive=true) |
|
void | lock (void) |
|
void | unlock (void) |
|
std::vector< connect_pool * > & | get_pools (void) |
|
size_t | check_idle (size_t step, size_t *left=NULL) |
|
size_t | size (void) const |
|
connect_pool * | get_default_pool (void) |
|
void | statistics (void) |
|
bool | start_monitor (connect_monitor *monitor) |
|
connect_monitor * | stop_monitor (bool graceful=true) |
|
void | set_pools_status (const char *addr, bool alive) |
|
|
virtual connect_pool * | create_pool (const char *addr, size_t count, size_t idx)=0 |
|
void | set_service_list (const char *addr_list, int count, int conn_timeout, int rw_timeout) |
|
conns_pools & | get_pools_by_id (unsigned long id) |
|
connect_pool * | create_pool (const conn_config &cf, size_t idx) |
|
void | create_pools_for (pools_t &pools) |
|
void | remove (pools_t &pools, const char *addr) |
|
void | set_status (pools_t &pools, const char *addr, bool alive) |
|
unsigned long | get_id (void) const |
|
void | get_key (const char *addr, string &key) |
|
void | get_addr (const char *key, string &addr) |
|
connect_pool * | add_pool (const char *addr) |
|
| noncopyable () |
|
| ~noncopyable () |
|
connect pool 服务管理器,有获取连接池等功能
在文件 connect_manager.hpp 第 45 行定义.
◆ manager_cit
◆ manager_it
◆ manager_t
◆ pools_cit
◆ pools_it
◆ pools_t
◆ connect_manager()
acl::connect_manager::connect_manager |
( |
void |
| ) |
|
◆ ~connect_manager()
virtual acl::connect_manager::~connect_manager |
( |
void |
| ) |
|
|
virtual |
◆ add_pool()
connect_pool* acl::connect_manager::add_pool |
( |
const char * |
addr | ) |
|
|
protected |
◆ bind_thread()
void acl::connect_manager::bind_thread |
( |
bool |
yes | ) |
|
◆ check_idle()
size_t acl::connect_manager::check_idle |
( |
size_t |
step, |
|
|
size_t * |
left = NULL |
|
) |
| |
检测连接池中的空闲连接,将过期的连接释放掉
- 参数
-
step | {size_t} 每次检测连接池的个数 |
left | {size_t*} 非空时,将存储所有剩余连接个数总和 |
- 返回
- {size_t} 被释放的空闲连接数
◆ create_pool() [1/2]
virtual connect_pool* acl::connect_manager::create_pool |
( |
const char * |
addr, |
|
|
size_t |
count, |
|
|
size_t |
idx |
|
) |
| |
|
protectedpure virtual |
◆ create_pool() [2/2]
◆ create_pools_for()
void acl::connect_manager::create_pools_for |
( |
pools_t & |
pools | ) |
|
|
protected |
◆ get()
connect_pool* acl::connect_manager::get |
( |
const char * |
addr, |
|
|
bool |
exclusive = true , |
|
|
bool |
restore = false |
|
) |
| |
根据服务端地址获得该服务器的连接池
- 参数
-
addr | {const char*} redis 服务器地址(ip:port) |
exclusive | {bool} 是否需要互斥访问连接池数组,当需要动态 管理连接池集群时,该值应为 true |
restore | {bool} 当该服务结点被置为不可用时,该参数决定是否 自动将之恢复为可用状态 |
- 返回
- {connect_pool*} 返回空表示没有此服务
◆ get_addr()
void acl::connect_manager::get_addr |
( |
const char * |
key, |
|
|
string & |
addr |
|
) |
| |
|
protected |
◆ get_config()
const conn_config* acl::connect_manager::get_config |
( |
const char * |
addr, |
|
|
bool |
use_first = false |
|
) |
| |
根据指定地址获取该地址对应的连接池配置对象
- 参数
-
addr | {const char*} 目标连接池地址 |
use_first | {bool} 如果目标地址的配置对象不存在,是否允许使用 第一个地址配置对象 |
- 返回
- {const conn_config*} 返回 NULL 表示不存在
◆ get_default_pool()
connect_pool* acl::connect_manager::get_default_pool |
( |
void |
| ) |
|
|
inline |
获得缺省的服务器连接池
- 返回
- {connect_pool*} 当调用 init 函数的 default_addr 为空时 该函数返回 NULL
在文件 connect_manager.hpp 第 191 行定义.
connect_pool * default_pool_
◆ get_id()
unsigned long acl::connect_manager::get_id |
( |
void |
| ) |
const |
|
protected |
◆ get_key()
void acl::connect_manager::get_key |
( |
const char * |
addr, |
|
|
string & |
key |
|
) |
| |
|
protected |
◆ get_pools()
std::vector<connect_pool*>& acl::connect_manager::get_pools |
( |
void |
| ) |
|
获得所有的服务器的连接池,该连接池中包含缺省的服务连接池
- 返回
- {std::vector<connect_pool*>&}
◆ get_pools_by_id()
conns_pools& acl::connect_manager::get_pools_by_id |
( |
unsigned long |
id | ) |
|
|
protected |
◆ init()
void acl::connect_manager::init |
( |
const char * |
default_addr, |
|
|
const char * |
addr_list, |
|
|
size_t |
count, |
|
|
int |
conn_timeout = 30 , |
|
|
int |
rw_timeout = 30 |
|
) |
| |
初始化所有服务器的连接池,该函数调用 set 过程添加每个服务的连接池
- 参数
-
default_addr | {const char*} 缺省的服务器地址,如果非空, 则在查询时优先使用此服务器 |
addr_list | {const char*} 所有服务器列表,可以为空 格式: IP:PORT:COUNT;IP:PORT:COUNT;IP:PORT;IP:PORT ... 或 IP:PORT:COUNT,IP:PORT:COUNT,IP:PORT;IP:PORT ... 如:127.0.0.1:7777:50;192.168.1.1:7777:10;127.0.0.1:7778 |
count | {size_t} 当 addr_list 中分隔的某个服务没有 COUNT 信息时便用此值,当此值为 0 时,则不限制连接数上限 |
conn_timeout | {int} 网络连接时间(秒) |
rw_timeout | {int} 网络 IO 超时时间(秒) 注:default_addr 和 addr_list 不能同时为空 |
被这些函数引用 acl::http_server_impl::http_server_impl().
◆ lock()
void acl::connect_manager::lock |
( |
void |
| ) |
|
当用户重载了 peek 函数时,可以调用此函数对连接池管理过程加锁
◆ peek() [1/2]
从连接池集群中获得一个连接池,该函数采用轮循方式从连接池集合中获取 一个后端服务器的连接池,从而保证了完全的均匀性;该函数内部会自动对 连接池管理队列加锁 此外,该函数为虚接口,允许子类实现自己的轮循方式
- 返回
- {connect_pool*} 返回一个连接池,返回指针永远非空
◆ peek() [2/2]
virtual connect_pool* acl::connect_manager::peek |
( |
const char * |
key, |
|
|
bool |
exclusive = true |
|
) |
| |
|
virtual |
从连接池集群中获得一个连接池,该函数采用哈希定位方式从集合中获取一个 后端服务器的连接池;子类可以重载此虚函数,采用自己的集群获取方式 该虚函数内部缺省采用 CRC32 的哈希算法;
- 参数
-
key | {const char*} 键值字符串,如果该值为 NULL,则内部 自动切换到轮循方式 |
exclusive | {bool} 是否需要互斥访问连接池数组,当需要动态 管理连接池集群时,该值应为 true |
- 返回
- {connect_pool*} 返回一个可用的连接池,返回指针永远非空
◆ remove() [1/2]
void acl::connect_manager::remove |
( |
const char * |
addr | ) |
|
从连接池集群中删除某个地址的连接池,该函数可以在程序运行过程中 被调用,因为内部会自动加锁
- 参数
-
addr | {const char*} 服务器地址(ip:port) |
◆ remove() [2/2]
void acl::connect_manager::remove |
( |
pools_t & |
pools, |
|
|
const char * |
addr |
|
) |
| |
|
protected |
◆ set()
void acl::connect_manager::set |
( |
const char * |
addr, |
|
|
size_t |
count, |
|
|
int |
conn_timeout = 30 , |
|
|
int |
rw_timeout = 30 |
|
) |
| |
添加服务器的客户端连接池,该函数可以在程序运行时被调用,内部自动加锁
- 参数
-
addr | {const char*} 服务器地址,格式:ip:port 注意:调用本函数时每次仅能添加一个服务器地址,可以循环调用本方法 |
count | {size_t} 连接池数量限制, 如果该值设为 0,则不设置 连接池的连接上限 |
conn_timeout | {int} 网络连接时间(秒) |
rw_timeout | {int} 网络 IO 超时时间(秒) |
◆ set_check_inter()
void acl::connect_manager::set_check_inter |
( |
int |
n | ) |
|
设置自动检查空闲连接的时间间隔,缺省值为 30 秒
- 参数
-
◆ set_idle_ttl()
void acl::connect_manager::set_idle_ttl |
( |
time_t |
ttl | ) |
|
设置连接池中空闲连接的空闲生存周期
- 参数
-
ttl | {time_t} 空闲连接的生存周期,当该值 < 0 则表示空闲连接 不过期,== 0 时表示立刻过期,> 0 表示空闲该时间段后将被释放 |
◆ set_pools_status()
void acl::connect_manager::set_pools_status |
( |
const char * |
addr, |
|
|
bool |
alive |
|
) |
| |
设置某个连接池服务的存活状态,内部会自动加锁
- 参数
-
addr | {const char*} 服务器地址,格式:ip:port |
alive | {bool} 该服务器是否正常 |
◆ set_retry_inter()
void acl::connect_manager::set_retry_inter |
( |
int |
n | ) |
|
设置连接池失败后重试的时间时间隔(秒),该函数可以在程序运行时被 调用,内部自动加锁
- 参数
-
n | {int} 当该值 <= 0 时,若连接池出现问题则会立即被重试 |
◆ set_service_list()
void acl::connect_manager::set_service_list |
( |
const char * |
addr_list, |
|
|
int |
count, |
|
|
int |
conn_timeout, |
|
|
int |
rw_timeout |
|
) |
| |
|
protected |
◆ set_status()
void acl::connect_manager::set_status |
( |
pools_t & |
pools, |
|
|
const char * |
addr, |
|
|
bool |
alive |
|
) |
| |
|
protected |
◆ size()
size_t acl::connect_manager::size |
( |
void |
| ) |
const |
获得连接池集合中连接池对象的个数
- 返回
- {size_t}
◆ start_monitor()
启动后台非阻塞检测线程检测所有连接池连接状态
- 参数
-
monitor | {connect_monitor*} 连接检测对象 |
- 返回
- {bool} 是否正常启动了连接检测器,当返回 false 说明当前还有 正在运行的连接检测器,当想再次启动检测器时需要先调用 stop_monitor
◆ statistics()
void acl::connect_manager::statistics |
( |
void |
| ) |
|
◆ stop_monitor()
connect_monitor* acl::connect_manager::stop_monitor |
( |
bool |
graceful = true | ) |
|
停止后台检测线程
- 参数
-
graceful | {bool} 是否在关闭检测线程时需要等待所有的检测连接 关闭后才返回,当连接池集群对象为进程空间内不会多次分配与释放时, 则该值可以设为 false 从而使检测线程快速退出,否则应该等待所有检测 连接关闭后再使检测线程退出 |
- 返回
- {connect_monitor*} 返回 start_monitor 设置的检测器,同时 内部的 monitor_ 成员自动置 NULL
◆ thread_onexit()
static void acl::connect_manager::thread_onexit |
( |
void * |
ctx | ) |
|
|
staticprotected |
◆ thread_oninit()
static void acl::connect_manager::thread_oninit |
( |
void |
| ) |
|
|
staticprotected |
◆ unlock()
void acl::connect_manager::unlock |
( |
void |
| ) |
|
当用户重载了 peek 函数时,可以调用此函数对连接池管理过程加锁
◆ addrs_
◆ check_inter_
int acl::connect_manager::check_inter_ |
|
protected |
◆ default_addr_
string acl::connect_manager::default_addr_ |
|
protected |
◆ default_pool_
◆ idle_ttl_
time_t acl::connect_manager::idle_ttl_ |
|
protected |
◆ lock_
locker acl::connect_manager::lock_ |
|
protected |
◆ manager_
◆ monitor_
◆ retry_inter_
int acl::connect_manager::retry_inter_ |
|
protected |
◆ stat_inter_
int acl::connect_manager::stat_inter_ |
|
protected |
◆ thread_binding_
bool acl::connect_manager::thread_binding_ |
|
protected |
该类的文档由以下文件生成: