mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-05 05:18:53 +08:00
82 lines
2.2 KiB
C
82 lines
2.2 KiB
C
#ifndef __CONN_CACHE_INCLUDE_H__
|
||
#define __CONN_CACHE_INCLUDE_H__
|
||
|
||
#include "lib_acl.h"
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
typedef struct CONN_CACHE {
|
||
ACL_AIO *aio;
|
||
ACL_HTABLE *cache;
|
||
int conn_limit;
|
||
int nset;
|
||
int nget;
|
||
int nclose;
|
||
} CONN_CACHE;
|
||
|
||
typedef struct CONN CONN;
|
||
|
||
/**
|
||
* 连接池初始化函数, 该函数仅在程序初始化时被调用一次
|
||
* @param aio {ACL_AIO*} 异步流对象
|
||
* @param conn_limit {int} 每一个连接池的数量限制
|
||
* @return {CONN_CACHE*} 创建一个连接池的缓存对象
|
||
*/
|
||
CONN_CACHE *conn_cache_create(ACL_AIO *aio, int conn_limit);
|
||
|
||
/**
|
||
* 向连接池中添加一个连接流
|
||
* @param cache {CONN_CAHCE*} 长连接缓存对象
|
||
* @param timeout {int} 该连接的超时时间
|
||
* @param free_fn {void (*)(ACL_ASTREAM*, void*)} 关闭连接时的回调函数,
|
||
* 如果该参数非空,则当该连接被关闭前会自动调用 free_fn
|
||
* @param ctx {void*} free_fn 的参数之一
|
||
*/
|
||
void conn_cache_push_stream(CONN_CACHE *cache, ACL_ASTREAM *stream,
|
||
int timeout, void (*free_fn)(ACL_ASTREAM*, void*), void *ctx);
|
||
|
||
/**
|
||
* 从连接池取出对应某个键值的连接对象
|
||
* @param cache {CONN_CAHCE*} 长连接缓存对象
|
||
* @param key {const char*} 查询键值,如:192.168.0.1:80
|
||
* @return {CONN*} 连接对象, 若为 NULL 则表示不存在
|
||
*/
|
||
CONN *conn_cache_get_conn(CONN_CACHE *cache, const char *key);
|
||
|
||
/**
|
||
* 从连接池取出对应某个键值的连接流
|
||
* @param cache {CONN_CAHCE*} 长连接缓存对象
|
||
* @param key {const char*} 查询键值,如:192.168.0.1:80
|
||
* @param ctx_pptr {void**} 如果结果非空,则存储用户的自定义变量
|
||
* @return {ACL_ASTREAM*} 连接流
|
||
*/
|
||
ACL_ASTREAM *conn_cache_get_stream(CONN_CACHE *cache, const char *key, void **ctx_pptr);
|
||
|
||
/**
|
||
* 从连接池中删除对应某个键值的连接
|
||
* @param cache {CONN_CAHCE*} 长连接缓存对象
|
||
* @param key {const char*} 查询键值,如:192.168.0.1:80
|
||
*/
|
||
void conn_cache_delete_key(CONN_CACHE *cache, const char *key);
|
||
|
||
/**
|
||
* 从连接池中删除某个连接对象且关闭连接流
|
||
* @param conn {CONN*} 连接对象
|
||
*/
|
||
void conn_cache_delete_conn(CONN *conn);
|
||
|
||
/**
|
||
* 从连接池中删除某个连接流并删除对应的连接对象且关闭连接流
|
||
* @param cache {CONN_CAHCE*} 长连接缓存对象
|
||
* @param stream {ACL_ASTREAM*} 连接流
|
||
*/
|
||
void conn_cache_delete_stream(CONN_CACHE *cache, ACL_ASTREAM *stream);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif
|