acl  3.5.3.0
master_aio.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../stdlib/thread_mutex.hpp"
3 #include "../stream/aio_handle.hpp"
4 #include "../stream/aio_listen_stream.hpp"
5 #include "master_base.hpp"
6 
7 #ifndef ACL_CLIENT_ONLY
8 
9 struct ACL_VSTREAM;
10 struct ACL_VSTRING;
11 
12 namespace acl {
13 
14 class aio_handle;
15 class aio_socket_stream;
16 
17 /**
18  * acl_master 服务器框架中单线程非阻塞方式的模板类,该类对象只能有一个实例运行
19  */
21 {
22 public:
23  /**
24  * 开始运行,调用该函数是指该服务进程是在 acl_master 服务框架
25  * 控制之下运行,一般用于生产机状态
26  * @param argc {int} 从 main 中传递的第一个参数,表示参数个数
27  * @param argv {char**} 从 main 中传递的第二个参数
28  */
29  void run_daemon(int argc, char** argv);
30 
31  /**
32  * 在单独运行时的处理函数,用户可以调用此函数进行一些必要的调试工作
33  * @param addrs {const char*} 服务监听地址列表,格式:IP:PORT, IP:PORT...
34  * @param path {const char*} 配置文件全路径
35  * @param ht {aio_handle_type} 事件引擎的类型
36  * @return {bool} 监听是否成功
37  */
38  bool run_alone(const char* addrs, const char* path = NULL,
40 
41  /**
42  * 获得异步IO的事件引擎句柄,通过此句柄,用户可以设置定时器等功能
43  * @return {aio_handle*}
44  */
45  aio_handle* get_handle() const;
46 
47  /**
48  * 在 run_alone 模式下,通知服务器框架关闭引擎,退出程序
49  */
50  void stop();
51 
52  /**
53  * 获得配置文件路径
54  * @return {const char*} 返回值为 NULL 表示没有设配置文件
55  */
56  const char* get_conf_path(void) const;
57 
58 protected:
59  master_aio();
60  virtual ~master_aio();
61 
62  /**
63  * 纯虚函数:当接收到一个客户端连接时调用此函数
64  * @param stream {aio_socket_stream*} 新接收到的客户端异步流对象
65  * @return {bool} 该函数如果返回 false 则通知服务器框架不再接收
66  * 远程客户端连接,否则继续接收客户端连接
67  */
68  virtual bool on_accept(aio_socket_stream* stream) = 0;
69 
70 private:
71  aio_handle* handle_;
72  /**
73  * 基类 aio_accept_callback 的虚函数实现
74  * @param client {aio_socket_stream*} 异步客户端流
75  * @return {bool} 返回 true 以通知监听流继续监听
76  */
77  virtual bool accept_callback(aio_socket_stream* client);
78 
79 private:
80  thread_mutex lock_;
81  void push_back(server_socket* ss);
82 
83 private:
84 #if defined(_WIN32) || defined(_WIN64)
85  // 当接收到一个客户端连接时回调此函数
86  static void service_main(SOCKET, void*);
87 #else
88  static void service_main(int, void*);
89 #endif
90 
91  // 当监听一个服务地址时回调此函数
92  static void service_on_listen(void*, ACL_VSTREAM*);
93 
94  // 当进程切换用户身份后调用的回调函数
95  static void service_pre_jail(void*);
96 
97  // 当进程切换用户身份后调用的回调函数
98  static void service_init(void*);
99 
100  // 当进程退出时调用的回调函数
101  static void service_exit(void*);
102 
103  // 当进程收到 SIGHUP 信号后会回调本函数
104  static int service_on_sighup(void*, ACL_VSTRING*);
105 };
106 
107 } // namespace acl
108 
109 #endif // ACL_CLIENT_ONLY
aio_handle_type
Definition: aio_handle.hpp:13
#define ACL_CPP_API