acl  3.5.3.0
acl::connect_manager类 参考abstract

#include <connect_manager.hpp>

+ 类 acl::connect_manager 继承关系图:
+ acl::connect_manager 的协作图:

Public 成员函数

 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_configget_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_poolget (const char *addr, bool exclusive=true, bool restore=false)
 
virtual connect_poolpeek (void)
 
virtual connect_poolpeek (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_poolget_default_pool (void)
 
void statistics (void)
 
bool start_monitor (connect_monitor *monitor)
 
connect_monitorstop_monitor (bool graceful=true)
 
void set_pools_status (const char *addr, bool alive)
 

Protected 类型

typedef std::vector< connect_pool * > pools_t
 
typedef pools_t::iterator pools_it
 
typedef pools_t::const_iterator pools_cit
 
typedef std::map< unsigned long, conns_pools * > manager_t
 
typedef manager_t::iterator manager_it
 
typedef manager_t::const_iterator manager_cit
 

Protected 成员函数

virtual connect_poolcreate_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_poolsget_pools_by_id (unsigned long id)
 
connect_poolcreate_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_pooladd_pool (const char *addr)
 
- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

静态 Protected 成员函数

static void thread_oninit (void)
 
static void thread_onexit (void *ctx)
 

Protected 属性

bool thread_binding_
 
string default_addr_
 
connect_pooldefault_pool_
 
std::map< string, conn_configaddrs_
 
manager_t manager_
 
locker lock_
 
int stat_inter_
 
int retry_inter_
 
time_t idle_ttl_
 
int check_inter_
 
connect_monitormonitor_
 

详细描述

connect pool 服务管理器,有获取连接池等功能

在文件 connect_manager.hpp45 行定义.

成员类型定义说明

◆ manager_cit

typedef manager_t::const_iterator acl::connect_manager::manager_cit
protected

在文件 connect_manager.hpp245 行定义.

◆ manager_it

typedef manager_t::iterator acl::connect_manager::manager_it
protected

在文件 connect_manager.hpp244 行定义.

◆ manager_t

typedef std::map<unsigned long, conns_pools*> acl::connect_manager::manager_t
protected

在文件 connect_manager.hpp243 行定义.

◆ pools_cit

typedef pools_t::const_iterator acl::connect_manager::pools_cit
protected

在文件 connect_manager.hpp241 行定义.

◆ pools_it

typedef pools_t::iterator acl::connect_manager::pools_it
protected

在文件 connect_manager.hpp240 行定义.

◆ pools_t

typedef std::vector<connect_pool*> acl::connect_manager::pools_t
protected

在文件 connect_manager.hpp239 行定义.

构造及析构函数说明

◆ 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)

是否将连接池与线程自动绑定,主要用于协程环境中,内部缺省值为 false, 该方法在本对象创建后仅能调用一次

参数
yes{bool}

被这些函数引用 acl::http_server_impl::http_server_impl().

+ 这是这个函数的调用关系图:

◆ 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

纯虚函数,子类必须实现此函数用来创建连接池对象

参数
addr{const char*} 服务器监听地址,格式:ip:port
count{size_t} 连接池的大小限制,为 0 时,则连接池没有限制
idx{size_t} 该连接池对象在集合中的下标位置(从 0 开始)
返回
{connect_pool*} 返回创建的连接池对象

acl::redis_client_cluster, acl::mysql_manager, acl::pgsql_manager, acl::sqlite_manager, acl::http_request_manager, acl::memcache_manager , 以及 acl::tcp_manager 内被实现.

◆ create_pool() [2/2]

connect_pool* acl::connect_manager::create_pool ( const conn_config cf,
size_t  idx 
)
protected

◆ 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.hpp191 行定义.

192  {
193  return default_pool_;
194  }
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]

virtual connect_pool* acl::connect_manager::peek ( void  )
virtual

从连接池集群中获得一个连接池,该函数采用轮循方式从连接池集合中获取 一个后端服务器的连接池,从而保证了完全的均匀性;该函数内部会自动对 连接池管理队列加锁 此外,该函数为虚接口,允许子类实现自己的轮循方式

返回
{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 秒

参数
n{int} 时间间隔

◆ 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()

bool acl::connect_manager::start_monitor ( connect_monitor monitor)

启动后台非阻塞检测线程检测所有连接池连接状态

参数
monitor{connect_monitor*} 连接检测对象
返回
{bool} 是否正常启动了连接检测器,当返回 false 说明当前还有 正在运行的连接检测器,当想再次启动检测器时需要先调用 stop_monitor

◆ statistics()

void acl::connect_manager::statistics ( void  )

打印当前所有 redis 连接池的访问量

◆ 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_

std::map<string, conn_config> acl::connect_manager::addrs_
protected

在文件 connect_manager.hpp251 行定义.

◆ check_inter_

int acl::connect_manager::check_inter_
protected

在文件 connect_manager.hpp258 行定义.

◆ default_addr_

string acl::connect_manager::default_addr_
protected

在文件 connect_manager.hpp248 行定义.

◆ default_pool_

connect_pool* acl::connect_manager::default_pool_
protected

在文件 connect_manager.hpp249 行定义.

◆ idle_ttl_

time_t acl::connect_manager::idle_ttl_
protected

在文件 connect_manager.hpp257 行定义.

◆ lock_

locker acl::connect_manager::lock_
protected

在文件 connect_manager.hpp254 行定义.

◆ manager_

manager_t acl::connect_manager::manager_
protected

在文件 connect_manager.hpp252 行定义.

◆ monitor_

connect_monitor* acl::connect_manager::monitor_
protected

在文件 connect_manager.hpp259 行定义.

◆ retry_inter_

int acl::connect_manager::retry_inter_
protected

在文件 connect_manager.hpp256 行定义.

◆ stat_inter_

int acl::connect_manager::stat_inter_
protected

在文件 connect_manager.hpp255 行定义.

◆ thread_binding_

bool acl::connect_manager::thread_binding_
protected

在文件 connect_manager.hpp247 行定义.


该类的文档由以下文件生成: