acl  3.5.3.0
tcp_keeper.hpp
浏览该文件的文档.
1 #pragma once
2 #include "fiber_cpp_define.hpp"
3 #include <string>
4 
5 namespace acl {
6 
7 class keeper_waiter;
8 class socket_stream;
9 class thread_mutex;
10 
11 /**
12  * 鐙珛绾跨▼鐢ㄤ簬棰勫厛涓庢湇鍔″櫒鍒涘缓绌洪棽杩炴帴锛屽鎴风鍙互鐩存帴浠庤杩炴帴姹犱腑鑾峰彇鏂拌繛鎺ワ紝
13  * 杩欏浜 ping rtt 杈冮暱锛堝锛10ms 浠ヤ笂锛夋瘮杈冩湁浠峰€硷紝鍙互鏈夋晥鍦板噺灏戝洜缃戠粶 rtt
14  * 閫犳垚鐨勮繛鎺ユ椂闂存崯鑰
15  */
16 class tcp_keeper : public thread
17 {
18 public:
19  tcp_keeper(void);
20  ~tcp_keeper(void);
21 
22  /**
23  * 璁剧疆寤虹珛缃戠粶杩炴帴鐨勮秴鏃舵椂闂达紙绉掞級
24  * @param n {int}
25  * @return {tcp_keeper&}
26  */
28 
29  /**
30  * 璁剧疆缃戠粶濂楁帴瀛 IO 璇诲啓瓒呮椂鏃堕棿锛堢锛
31  * @param n {int}
32  * @return {tcp_keeper&}
33  */
34  tcp_keeper& set_rw_timeout(int n);
35 
36  /**
37  * 璁剧疆杩炴帴姹犱腑绌洪棽杩炴帴鐨勬渶灏忚繛鎺ユ暟
38  * @param n {int}
39  * @return {tcp_keeper&}
40  */
41  tcp_keeper& set_conn_min(int n);
42 
43  /**
44  * 璁剧疆杩炴帴姹犱腑绌洪棽杩炴帴鐨勬渶澶ц繛鎺ユ暟
45  * @param n {int}
46  * @return {tcp_keeper&}
47  */
48  tcp_keeper& set_conn_max(int n);
49 
50  /**
51  * 璁剧疆缃戠粶杩炴帴鐨勭┖闂叉椂闂达紙绉掞級锛岀┖闂叉椂闂磋秴杩囨鍊兼椂杩炴帴灏嗚鍏抽棴
52  * @param ttl {int}
53  * @return {tcp_keeper&}
54  */
55  tcp_keeper& set_conn_ttl(int ttl);
56 
57  /**
58  * 璁剧疆姣忎釜杩炴帴姹犵殑绌洪棽鏃堕棿锛堢锛夛紝鍗冲綋璇ヨ繛鎺ユ睜鐨勭┖闂叉椂闂磋秴杩囨鍊兼椂
59  * 灏嗚閲婃斁锛屼粠鑰屼究浜庣郴缁熷洖鏀跺唴瀛樿祫婧
60  * @param ttl {int}
61  * @return {tcp_keeper&}
62  */
63  tcp_keeper& set_pool_ttl(int ttl);
64 
65  /**
66  * 璁剧疆 rtt 闃€鍊硷紙绉掞級锛屽綋缃戠粶杩炴帴鏃堕棿瓒呰繃姝ゅ€兼椂鎵嶄細鍚敤浠庤繛鎺ユ睜鎻愬彇
67  * 杩炴帴鏂瑰紡锛屽鏋滅綉缁滆繛鎺ユ椂闂村皬浜庢鍊硷紝鍒欑洿鎺ヨ繛鎺ユ湇鍔″櫒
68  * @param rtt {double}
69  * @return {tcp_keeper&}
70  */
71  tcp_keeper& set_rtt_min(double rtt);
72 
73  /**
74  * 浠 tcp_keeper 瀵硅薄涓彁鍙栧搴斿湴鍧€鐨勭綉缁滆繛鎺ュ鎺
75  * @param addr {const char*} 鏈嶅姟鍣ㄥ湴鍧€锛屾牸寮忥細ip:port
76  * @param hit {bool*} 闈炵┖鏃讹紝灏嗗瓨鏀捐杩炴帴鏄惁鍦ㄨ繛鎺ユ睜鐨勭┖闂茶繛鎺ヤ腑鍛戒腑
77  * @param sync {bool} 鏄惁閲囩敤鐩磋繛妯″紡锛屽鏋滈噰鐢ㄧ洿杩炴ā寮忥紝鍒欏唴閮ㄤ笉浼
78  * 閽堝璇ュ湴鍧€棰勫垱杩炴帴姹
79  * @return {socket_stream*} 杩斿洖 NULL 琛ㄧず杩炴帴澶辫触
80  */
81  socket_stream* peek(const char* addr, bool* hit = NULL,
82  bool sync = false);
83 
84  /**
85  * 鍋滄 tcp_keeper 绾跨▼杩愯
86  */
87  void stop(void);
88 
89 protected:
90  // @override
91  void* run(void);
92 
93 private:
94  double rtt_min_;
95  keeper_waiter* waiter_;
96  std::map<std::string, double> addrs_;
97  thread_mutex* lock_;
98 
99  bool direct(const char* addr, bool& found);
100  void remove(const char* addr);
101  void update(const char* addr, double cost);
102 };
103 
104 } // namespace acl
tcp_keeper & set_rw_timeout(int n)
void * run(void)
tcp_keeper & set_conn_ttl(int ttl)
socket_stream * peek(const char *addr, bool *hit=NULL, bool sync=false)
tcp_keeper & set_conn_timeout(int n)
tcp_keeper & set_conn_max(int n)
tcp_keeper & set_conn_min(int n)
tcp_keeper & set_pool_ttl(int ttl)
void stop(void)
tcp_keeper & set_rtt_min(double rtt)