ACE Reactor简化了事件多路分离的开发,这对于快速开发高性能服务器有很大帮助。ACE Reactor在UNIX/Linux上缺省使用select方式实现多路分离,为了开发一个简单的服务器,一般需要实现以下虚接口:
- handle_input
- handle_output
- handle_close
这里要特别说明的是 handle_input 和 handle_output 的返回值以及 ACE_Event_Handler::DONT_CALL 标志。在 ACE 程序员开发指南中特别指出 handle_input 和 handle_output 有三种返回值:
文档中说 -1 表示调用失败,然后 Reactor 将是事件分发后调用 handle_close。一般情况下,这看起来很正常,但是如果在 handle_input/output 中显示调用了 remove_handler, 事情显得有点怪异。有两种情况:
- 调用 remove_handler 时使用 DONT_CALL标志
- 调用 remove_handler 时不使用 DONT_CALL标志
当不使用 DONT_CALL 标志时,remove_handler 将在函数内部调用 handle_close;堆处理器在 handle_input/output 返回时将再次调用 handle_close。一般来说这不是我们希望的结果。
当使用 DONT_CALL 标志时,remove_handler 不会调用 handle_close方式,但是 handle_input/output 返回时,堆处理器同样不调用 handle_close。这显得非常怪异,整个 handle_close 就完全废掉了。
解决办法就是尽量不要在 handle_input/output中 调用 remove_handler。如果非要调用不可,一定要清楚 handle_close 什么时候会被调用,什么时候不会被调用。
分享到:
相关推荐
ACE Reactor是ACE库中的核心组件之一,它是事件驱动设计模式的一种实现,用于处理并发事件。在这个“ACE_Reactor.rar”压缩包中,包含的可能是关于如何使用ACE Reactor来构建服务器端程序的相关资料。 首先,我们来...
3. **定义Svc_Handler**:继承`ACE_Svc_Handler`并重写其中的回调方法,如`open()`, `handle_input()`, `handle_output()`, `handle_close()`等,以实现具体的业务逻辑。`open()`在新连接建立时被调用,`handle_...
- **handle_input(ACE_HANDLE)**: 处理输入事件,返回值通常表示是否成功处理。 - **handle_output(ACE_HANDLE)**: 处理输出事件,返回值通常表示是否成功处理。 - **handle_exception(ACE_HANDLE)**: 处理异常...
int handle_output(ACE_HANDLE handle) { // 处理输出事件 return 0; } int handle_exception(ACE_HANDLE handle) { // 处理异常事件 return 0; } }; ``` ###### 3.1.2 ACE_Reactor `ACE_Reactor`类负责...
再者,ACE库提供了强大的I/O复用机制,如ACE_Select_Reactor和ACE.epoll_Reactor,它们分别对应于select和epoll系统调用,能够在Linux上实现高效的大规模并发连接处理。ACE_TSS(Thread Specific Storage)类允许...
`ACE_Reactor::handle_input()`、`handle_output()`和`handle_exception()`方法用于处理读、写和异常事件。 **四、服务器端实现** 在"Reactor_Server"这个文件中,我们可以预期包含以下关键步骤: 1. 创建`ACE_...
2. `ACE_Reactor`:管理事件,如I/O完成、定时器触发等,采用非阻塞I/O模型。 3. `ACE_Svc_Handler`:处理具体的业务逻辑,继承自`ACE_Event_Handler`,实现读写回调函数。 4. `ACE_Thread_Manager`:用于管理线程,...
例如,对于网络编程中的 TCP 连接,可以注册读就绪和写就绪事件处理器,当有数据可读时,Reactor 会回调读事件处理器的 `handle_input()` 方法,有数据可写时则回调 `handle_output()` 方法。 总的来说,ACE ...
1. Reactor模式:这是ACE的核心,用于处理I/O事件,实现事件多路复用。Reactor可以监听多个描述符,当有事件发生时,它会调用相应的处理函数。 2. Proactor模式:与Reactor类似,但更适用于异步I/O操作,如Windows下...
在ACE_Client_1中,可能会使用到ACE_Wait_for_Single_Ready或者ACE_Select_Reactor等组件,来等待数据的到来并进行相应的处理。这种编程模型对于构建高性能、高并发的客户端应用尤其关键。 此外,ACE提供了线程管理...
标题中的"ACE.zip_ACE_ACE p_ACE source code"表明这是一个包含ACE库源代码的压缩文件。"ACE p"可能是指"ACE Proactor",它是ACE库的一部分,提供了异步事件处理的能力。"ACE source code"则直接指明了压缩包内的...
de4dot Reactor v4_.NetReactor_www.mod.ret_reactor4.9脱壳_unpacker_
它包含了一些关键的方法,如`handle_input`、`handle_output`和`handle_exception`等,用于处理各种类型的事件。 - **事件复用器类`ACE_Reactor`**:这是ACE Reactor的核心组件,负责管理事件处理器的注册与注销,...
在“ACE.rar_ACE”这个压缩包中,包含了关于ACE的初级、中级和高级学习资料,以及相关的代码示例,非常适合对ACE技术感兴趣的开发者进行深入学习。 **初级知识点** 1. **ACE框架结构**:ACE主要由几个核心组件构成...
.NET Reactor 6.5 是一款强大的.NET代码保护和打包工具,主要面向.NET开发者,用于保护他们的.NET应用程序免受逆向工程、调试和非法复制。它通过混淆代码、加密资源和阻止调试,确保你的知识产权安全无虞。在.NET...
6. **数据传输**: 通过调用ACE_SVC_Handler的handle_input()或handle_write_stream()方法,服务器和客户端可以相互发送和接收数据。 7. **错误处理和异常安全**: ACE提供了一套强大的错误处理机制,包括异常安全性...
在Reactor中,`handle_input()`和`handle_output()`方法是同步的,可能导致CPU资源被长时间占用。Proactor则利用异步I/O工厂类进行消息收发,read/write操作完成后立即返回,让主线程专注于业务逻辑,而不在I/O处理...
在 ACE 框架中,还有其他类型的 Reactor,例如 ACE_Dev_Poll_Reactor 和 ACE_TP_Reactor。 4. Bridge 模式的优点 Bridge 模式的优点在于,它可以使得抽象部分和实现部分独立地变化,提高了系统的灵活性和可维护性...
使用ACE时,你可能需要创建自定义的服务处理器(继承自`ACE_Svc_Handler`),并重写其`open()`, `handle_input()`, `handle_output()`, `handle_timeout()`等方法来处理不同的事件。同时,通过`ACE_Reactor`对象注册...
dotnet_reactor_setup_6_0_0_0是一个小众的.net代码加壳工具,防止反编译