acl
3.5.3.0
tcp_ipc.hpp
浏览该文件的文档.
1
#pragma once
2
#include "../stdlib/noncopyable.hpp"
3
4
namespace
acl
5
{
6
7
class
tcp_manager;
8
class
tcp_pool;
9
class
string;
10
11
/**
12
* 该类封装了 tcp_manager 管理类,可以动态添加目标服务端地址,同时动态创建与
13
* 每一个服务端的连接池
14
*/
15
class
ACL_CPP_API
tcp_ipc
:
public
noncopyable
16
{
17
public
:
18
tcp_ipc
(
void
);
19
~
tcp_ipc
(
void
);
20
21
/**
22
* 设置与每个服务器所建连接池的最大连接限制
23
* @param max {int} 每个连接池的最大连接限制,当 <= 0 时则不限制连接数
24
* @return {tcp_ipc&}
25
*/
26
tcp_ipc
& set_limit(
int
max);
27
28
/**
29
* 设置连接池中每个连接了空闲时间,当连接空闲时间超过设置值时将被关闭
30
* @param ttl {int} 空闲连接的最大超时时间
31
* @return {tcp_ipc&}
32
*/
33
tcp_ipc
& set_idle(
int
ttl);
34
35
/**
36
* 设置每个连接的网络连接超时时间
37
* @param conn_timeout {int} 网络连接超时时间(秒)
38
* @return {tcp_ipc&}
39
*/
40
tcp_ipc
& set_conn_timeout(
int
conn_timeout);
41
42
/**
43
* 设置每个连接的网络读写超时时间
44
* @param timeout {int} 读写超时时间(秒)
45
* @return {tcp_ipc&}
46
*/
47
tcp_ipc
& set_rw_timeout(
int
timeout);
48
49
/**
50
* 获得 TCP 管理器对象
51
* @return {tcp_manager&}
52
*/
53
tcp_manager
& get_manager(
void
)
const
;
54
55
/**
56
* 可以调用本方法显示添加一个服务器地址,只有当地址不存在时才会添加
57
* @param addr {const char*} 服务器地址,格式:IP:PORT
58
* @return {tcp_ipc&}
59
*/
60
tcp_ipc
& add_addr(
const
char
* addr);
61
62
/**
63
* 根据服务器地址删除指定的连接池对象,当连接池对象正在被引用时,该对象
64
* 不会被删除,而是采用延迟删除方式,当最后一个连接被归还后该连接池对象
65
* 才会被真正删除
66
* @param addr {const char*} 服务器地址,格式:IP:PORT
67
* @return {tcp_ipc&}
68
*/
69
tcp_ipc
& del_addr(
const
char
* addr);
70
71
/**
72
* 检测指定的服务器地址是否成功
73
* @param addr {const char*} 服务器地址,格式:IP:PORT
74
* @return {bool}
75
*/
76
bool
addr_exist(
const
char
* addr);
77
78
/**
79
* 获得当前所有的服务器地址集合
80
* @param addrs {std::vector<string>&} 存储结果集
81
*/
82
void
get_addrs(std::vector<string>& addrs);
83
84
/**
85
* 向服务器发送指定长度的数据包
86
* @param addr {const char*} 指定的目标服务器地址
87
* @param data {const void*} 要发送的数据包地址
88
* @param len {unsigned int} 数据长度
89
* @param out {string*} 当该对象非 NULL 时表明需要从服务器读取响应数据,
90
* 响应结果将被存放在该缓冲区中,如果该对象为 NULL,则表示无需读取
91
* 服务器的响应数据
92
* @return {bool} 发送是否成功
93
*/
94
bool
send(
const
char
* addr,
const
void
* data,
unsigned
int
len,
95
string
* out = NULL);
96
97
/**
98
* 向所有服务器发送数据包
99
* @param data {const void*} 要发送的数据包地址
100
* @param len {unsigned int} 数据长度
101
* @param exclusive {bool} 发送广播包时,是否加线程锁以防止其它线程
102
* 竞争内部连接池资源
103
* @param check_result {bool} 是否读服务器响应以证明服务器收到了数据
104
* @param nerr {unsigned *} 非 NULL 时存放失败的服务器的个数
105
* @return {size_t} 返回发送到的服务器的数量
106
*/
107
size_t
broadcast(
const
void
* data,
unsigned
int
len,
108
bool
exclusive =
true
,
bool
check_result =
false
,
109
unsigned
* nerr = NULL);
110
111
private
:
112
tcp_manager
* manager_;
113
int
max_;
114
int
ttl_;
115
int
conn_timeout_;
116
int
rw_timeout_;
117
118
bool
send(
tcp_pool
&,
const
void
*,
unsigned
int
,
string
*);
119
};
120
121
}
// namespace acl
acl::tcp_manager
Definition:
tcp_manager.hpp:10
acl
Definition:
acl_cpp_init.hpp:4
acl::noncopyable
Definition:
noncopyable.hpp:6
acl::tcp_ipc
Definition:
tcp_ipc.hpp:15
acl::tcp_pool
Definition:
tcp_pool.hpp:11
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
include
acl_cpp
connpool
tcp_ipc.hpp
生成于 2021年 九月 10日 星期五 11:14:44 , 为 acl使用
1.8.15