acl  3.5.3.0
beanstalk_pool.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "../stdlib/noncopyable.hpp"
4 #include <map>
5 
6 #if !defined(ACL_CLIENT_ONLY) && !defined(ACL_BEANSTALK_DISABLE)
7 
8 namespace acl {
9 
10 class beanstalk;
11 class locker;
12 
13 /**
14  * beanstalk 客户端连接池,可以同时连接不同的 beanstalkd 服务器,
15  * 每个 beanstalkd 有多个连接,内部自动加锁;但不控制连接数限制,
16  * 用户应自行控制连接池的最大连接上限
17  */
19 {
20 public:
22  ~beanstalk_pool();
23 
24  /**
25  * 从连接池中取得一个 beanstalkd 的客户端连接
26  * @param addr {const char*} beanstalkd 服务地址(domain:port)
27  * @param clean_watch {bool} 在取得连接对象后是否自动取消所有的
28  * 已关注队列
29  * @param conn_timeout {int} 连接 beanstalkd 的超时时间
30  * @return {beanstalk*} 返回非空表示正常,否则表示出错
31  */
32  beanstalk* peek(const char* addr, bool clean_watch = true,
33  int conn_timeout = 60);
34 
35  /**
36  * 将不用的 beanstalkd 连接放回到连接池中
37  * @param client {beanstalk*} beanstalkd 客户端连接
38  * @param clean_watch {bool} 是否取消已经关注的队列
39  * @param keep {bool} 如果为 true 则将 client 放回至连接池,
40  * 否则释放该连接
41  */
42  void put(beanstalk* client, bool clean_watch = true,
43  bool keep = true);
44 private:
45  locker* lock_;
46  typedef std::multimap<string, beanstalk*> bspool;
47  typedef bspool::const_iterator pool_cit;
48  typedef bspool::iterator pool_it;
49  typedef std::pair<pool_it, pool_it> pool_range;
50 
51  bspool pool_;
52 };
53 
54 } // namespace acl
55 
56 #endif // !defined(ACL_CLIENT_ONLY) && !defined(ACL_BEANSTALK_DISABLE)
#define ACL_CPP_API