Darwin Streaming server 的 Task 类

Darwin Streaming Server 是一个开放源代码的streaming server,对于streaming server的编程和软件结构有着一定的参考价值,它是使用C++写的,其中的并发模式的核心就是Task类,下面写一下我的理解:

多任务的程序常常采用线程+同步阻塞IO的模式, 每个线程/进程服务于一个client,使用阻塞式的IO:

这种模式对于交互式的长连接应用也是常见的选择(比如Telnet)。好处是实现极其简单,容易嵌入复杂的交互逻辑。Apache、ftpd 等都是这种工作模式。但是这种策略很能难足高性能程序的需求。

在handle大量用户的情况下,为了避免创建过多的线程导致context switch开销,常常采用select I/O复用的方法(你可能说select过时了,不过Darwin QTSS就是用的这个):

上面是经典的select IO复用的过程, 以上的过程可以由3步来描述:

  1. 应用注册事件
  2. 事件触发通知应用
  3. 应用运行处理事件

注意在SELECT THREAD有3个任务:接受事件注册,等待事件触发,驱动SESSION处理事件,这些任务可以分解为不同的角色,我们可以在这种模式里定义4种角色:

1. EventHandler : EventHandler 向 EventGenerator注册事件,并对注册事件进行处理

2.EventGenerator :EventGenerator接受事件注册,当事件触发的时候,通知 EventHandler

3.EventHandler Driver : EventHandler Driver 驱动EventHandler 的运行,当它发现有EventHandler 受到事件触发以后,调度运行 EventHandler 的事件处理函数。一个EventHandler Driver可以驱动多个EventHandler。多个EventHandler Driver可以组成 Pool 进行驱动EventHandler。

4. Event Driver : Event Driver 驱动 EventGenerator 的事件触发。EventGenerator本身不包含执行线程,需要Event Driver的驱动。多个EventGenerator 在 Event Driver 中等待事件,当事件发生时,Event Driver调度 EventGenerator的来触发事件。

下面就是Darwin对各个对象和上述角色的对应:

  1. Task 就是对EventHandler的对象化封装。每个Task对象有两个主要的方法:Signal和Run。当服务器希望发送一个事件给某个Task对象时,就会调用Signal()方法;而Run()方法是在Task对象获得处理该事件的时间片后运行的,服务器中的大部分工作都是在不同Task对象的Run()函数中进行的。每个Task对象的目标就是利用很小的且不会阻塞的时间片完成服务器指定某个工作。应用可以通过继承Task 并重写Run()方法实现自己的任务。
  2. EventContext 对应EventGenerator的角色,事件的触发者,当事件发生时,调用Task::signal().
  3. TaskThread 对应EventHandler Driver的角色。任务的驱动线程,对一个或者多个Task进行调度,通过调用 Task::run() 处理事件
  4. EventThread对应Event Driver的角色。EventContext的驱动线程,可以处理多个EventContext, 发生事件时调用EventContext::process_event(),后者将调用Task::Signal()

流程:

    1. Client或者 Task的子类向Event Context注册事件。
    2. Event Context将事件放入EventThread的Pool内。
    3. EventThread 调用select 等待多个事件中任一个触发。
    4. 事件触发以后,EventThread调用 Event Context::process_event()。
    5. 调用 Task::signal()。
    6. Task::signal()将task放入TaskThread的队列。
    7. TaskThread调度相应的Task, 执行其Run()方法。

Darwin Streaming server 的 Task 类

时间: 2024-08-29 03:52:15

Darwin Streaming server 的 Task 类的相关文章

Darwin Streaming Server 核心代码分析

基本概念 首先,我针对的代码是Darwin Streaming Server 6.0.3未经任何改动的版本. Darwin Streaming Server从设计模式上看,采用了Reactor的并发服务器设计模式,如果对Reactor有一定的了解会有助于对Darwin Streaming Server核心代码的理解. Reactor模式是典型的事件触发模式,当有事件发生时则完成相应的Task,Task的完成是通过调用相应的handle来实现的,对于handle的调用是由有限个数的Thread来完

Centos 6.3 install Darwin Streaming Server 6.0.3

网上说的天花乱坠,都是抄来抄去,没有一个是经过自己试验,然后才写的 周氏一族,整理技术文档,给下一代留点教程...... 1.服务器系统准备 2.安装文件准备 2.1  源码文件,请上官网,下载,或者用我下面的地址也可以. http://dss.macosforge.org/downloads/DarwinStreamingSrvr6.0.3-Source.tar 2.2  下载附件  dss_patch [里面有两个文件 dss-6.0.3.patch 和 dss-hh-20080728-1.

Darwin Streaming Server性能测试报告

为了验证Darwin Streaming Server在流媒体点播上的性能,EasyDarwin开源项目官方特地与国内某大型视频网站进行了一次性能测试(千兆网络环境下),针对本次RTSP直播流媒体测试范围,对码率为300K的视频进行压力测试,具体场景如下表所示: 测试环境: 测试结果: 测试结论: 根据当前测试环境配置,视频能够流畅播放并发能力上限为3000. 服务器带宽及配置如有改善,可以大大提高性能表现

Darwin Streaming Server Relay Setting

安装完Darwin Streaming Server,就可以使用VLC通过RTSP协议播放流媒体文件了.但是我现在有一个需求,需要将一台DSS(假设为A机)上的媒体文件发送到另一台DSS(假设为B机)上,客户端VLC通过访问B机来播放A机的媒体文件,也就是使用B机作为转发服务器.在网上找了很多关于配置DSS的文章,都是讲如何安装及配置播放列表,都没有讲如何配置转发(Relay).有一篇名为<基于DSS快速流媒体中继实现>的论文讲到了转发,但是它配置的是播放列表,实际播放的是B机上的文件,将B机

Darwin Streaming Server 安裝操作備忘

Darwin Streaming Server 安裝操作 Darwin Streaming Server是蘋果公司推出的開放源碼.跨平台多媒體串流伺服器, 提供音樂 (mp3) 與影音 (3gp.mp4.mov) 串流播放功能, 可由 Windows Media Player.VLC media player.QuickTime Player 等播放軟體收聽(看) 以下是在 Fedora 7 安裝 Darwin Streaming Server 5.5.5for Linux 的操作記錄 下載並安

Linux编译安装Darwin Streaming Server 6.0.3。。。

目前主流的流媒体服务器有微软的windows media server.RealNetworks的Helixserver和苹果公司的Darwin Streaming Server. 微软的windows media server只能在windows2000 server和windows 2003 server下使用,不在考虑之列.RealNetworks的Helixserver是一款跨平台的软件,功能也很强大,但并非免费软件. Darwin Streaming Server简称DSS.DSS是A

Linux编译安装Darwin Streaming Server 6.0.3

买回来VPS后就一直想在上面搭建一个流媒体服务,在网上搜索了很多资料,大部分都是介绍Linux中安装Darwin Streaming Server 5.5.5版本,因为这个版本提供了针对linux的安装脚本.但既然官网有了6.0.3版本,于是果断尝试安装最新的版本. 1.什么是Darwin Streaming Server 目前主流的流媒体服务器有微软的windows media server.RealNetworks的Helixserver和苹果公司的Darwin Streaming Serv

Darwin Streaming Server用vs2005编译运行过程

原创. 一:编译 Darwin6.0.3版本是最新版本,也提供了.dsw文件.但是使用vs2005和vc6是编译不过的.所以,采用Darwin5.5.5版本.使用vc6打开WinNTSupport文件夹下的.dsw工程,直接batch build,可一步生成. 使用vc编译速度快,但是调试和看代码不如2005方便.下面主要是使用vs2005编译的问题. 转换vs2005的sln后,提示没有StreamingloadingTool这个工程,不用管,因为服务器不依赖于该工程. (1)    提示:w

Darwin Streaming Server源码分析

2     Darwin流化服务器介绍DSS源代码完全采用标准C++语言写成,编程风格非常优秀,每个C++类都对应着一对和类同名的.h/.cpp文件.但是由于大量采用了面向对象的概念,如继承.多态等等:而且源文件和类相当多,所以不太容易讲清楚.因此,读者最好事先把代码完整的过滤一两遍,再配合本文,就能看得更清楚点.其中,最为重要的是基础功能类库(CommonUtilitiesLib)和流化服务器(StreamingServer)两个工程,前者是整个系统的通用代码工具箱,包括了线程管理.数据结构.