DSS Reactor Mode

http://www.cnblogs.com/MikeZhang/archive/2012/08/16/ReactorPattern20120815.html


Reactor模式在DSS中的体现

  Darwin流媒体服务器是由父进程及其fork出来的子进程构成的,子进程就是核心服务器。父进程的职责就是等待子进程退出。如果子进程出错退出,则父进程就会fork一个新的子进程,从而保证视频服务器继续提供服务。核心服务器的作用是充当VOD(视频点播)客户端与服务器模块之间的接口,VOD客户端采用RTPRTSP协议向服务器发送请求并接收响应,服务器模块负责处理VOD客户端的请求并向VOD客户端发送数据包。

  在DSS中,除主线程以外,还有有三种类型的线程

  • TaskThreadTaskThread通过运行Task类型对象的Run方法来完成相应Task的处理。典型的Task类型是RTSPSessionRTPSessionTaskThread的个数是可配置的,缺省情况下TaskThread的个数与处理器的个数一致。等待被TaskThread调用并运行的Task放在队列或者堆中。

  • EventThreadEventThread负责侦听套接口事件,在DSS中,有两种被侦听的事件,分别是建立RTSP连接请求的到达和RTSP请求的到达。对于RTSP连接请求的事件,EventThread建立一个RTSP
    Session
    ,并启动针对相应的socket的侦听。对于RTSP请求的事件,EventThread把对应的RTSPSession类型的Task加入到TaskThread的队列中,等待RTSP请求被处理。

  • IdleTaskThreadIdleTaskThread管理IdleTask类型对象的队列,根据预先设定的定时器触发IdleTask的调度。TCPListenerSocket就是一个IdleTask的派生类,当并发连接数达到设定的最大值时,会把派生自TCPListenerSocketRTSPListenerSocket加入到IdleTaskThread管理的IdleTask队列中,暂时停止对RTSP端口的侦听,直到被设定好的定时器触发。

下图是Darwin Streaming Server核心架构的示意图。在这个示意图中有三种类型的要素,分别是线程,Task队列或者堆,被侦听的事件。

  其中,事件线程Event threadEvent Demultiplexer事件分离,任务线程Task threadsEvent Handler事件处理器)

这里的主线程(Main thread)就是Reactor模式中的Reactor(Initiation Dispatcher)

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...