EasyDarwin

面向企业级的流媒体平台框架

EasyDarwin开始于2013年,遵循 Apple开源License APSL,为了敏捷流媒体服务器开发和简化企业流媒体应用开发而诞生的。

详细 >>

Darwin Streaming Server架构中的reactor设计模式


reactor设计模式,是一种基于事件驱动的设计模式。
《Pattern-Oriented Software Architecture, Volume 2》 对这个模式做了详细的讲解。这个模式的结构图如下: 图中的h...

reactor设计模式,是一种基于事件驱动的设计模式。

《Pattern-Oriented Software Architecture, Volume 2》对这个模式做了详细的讲解。

这个模式的结构图如下:

reactor模式类结构图

图中的handle对应的是操作系统提供的句柄,例如I/O句柄,Event_Handler类持有这些句柄,

reactor类内部提供一个事件循环:handle_events(),事件循环的代码实现利用了操作系统提供的多路分离函数,

WaitForMultipleObjects或者select等,这些多路分离的函数的特点是,可以同时等待多个句柄,在等待过程中所在

线程属于挂起状态,不消耗CPU时间,一旦某个句柄被触发,则线程被唤醒,函数将返回,线程可以执行后面的代码,

利用多路分离函数的这一特点,根据被激活的句柄对应的特定事件,调用相关的事件处理函数。可以实现事件循环。

register_handler()函数用于将Event_Handler对象注册到事件驱动列表中,保证对于某一类型的事件,会调用Event_Handler类的响应函数handle_event()。

reactor类在做多路分离时需要操纵Event_Handler类的Handle,因此Event_Handler类需要提供get_handle()函数。

另外,当程序不需要再对特定事件响应时,需要把Event_Handler对象从事件驱动列表中删除,因此reactor类还实现了remove_handler函数。

因为reactor相对稳定,一旦实现,不需要再定制,所以没有提供一个抽象接口类,但Event_Handler是经常需要根据不同的需求定制的,因此需要提供一个抽象接口类,然后根据实际需求编写派生类,提供具体句柄,并实现相关虚函数。

这个模式的优点是本身不涉及多线程,从而避免了线程的上下文切换。

对于响应事件处理时间较短的情况下,可以考虑使用这个模式。

如果处理一个事件需要花费大量时间,就不能使用这个模式,那样会导致其他事件处理被阻塞。

ACE_Reactor框架是这一模式的半成品,用户只要做三件事情就可以实现并使用这一模式:

1.从ACE_Event_Handler派生一个或多个类
       2.向ACE_Reactor类登记应用的事件处理对象
       3.运行ACE_Reactor事件循环。

示例代码可以参考ACE_wrappers/examples/APG/Reactor目录下的示例代码。

参考文献:

《Pattern-Oriented Software Architecture, Volume 2》
       《ACE程序员指南》



------------------------------ 分割线 ------------------------------
本站文章除注明转载外,均为本站原创或编辑,欢迎大家转载,但请务必注明出处,尊重他人成果,谢谢。
转载请注明:EasyDarwin;非本站文章均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。
文章中如果有错误可联系:johnson@easydarwin.org
推荐文章
H.265技术经过2年发展,我们认为H.265高清监......>
近年来,4K超高清、H.265编码技术、视频智能......>
随着科技的发展速度,医疗行业的信息化建设......>
商场里的监控视频除了防盗,还可以做什么呢......>
家用网络摄像机则通过自身的功能帮助消费者......>
最近更新
监控行业正在发生改变,摄像头的数量在增加......>
视频编码技术是对前端摄像机采集过来的数字......>
随着网络的不断发展和应用需求的多样化,对......>
太阳能监控既从早期的贵族金字塔走向了实用......>
随着监控技术的不断发展,已经有越来越多的......>
友情链接 | 申请链接
EasyDarwin官方微信!