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步来描述:
应用注册事件
事件触发通知应用
应用运行处理事件
注意在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对各个对象和上述角色的对应:
Task 就是对EventHandler的对象化封装。每个Task对象有两个主要的方法:Signal和Run。当服务器希望发送一个事件给某个Task对象时,就会调用Signal()方法;而Run()方法是在Task对象获得处理该事件的时间片后运行的,服务器中的大部分工作都是在不同Task对象的Run()函数中进行的。每个Task对象的目标就是利用很小的且不会阻塞的时间片完成服务器指定某个工作。应用可以通过继承Task 并重写Run()方法实现自己的任务。
EventContext 对应EventGenerator的角色,事件的触发者,当事件发生时,调用Task::signal().
TaskThread 对应EventHandler Driver的角色。任务的驱动线程,对一个或者多个Task进行调度,通过调用 Task::run() 处理事件
EventThread对应Event Driver的角色。EventContext的驱动线程,可以处理多个EventContext, 发生事件时调用EventContext::process_event(),后者将调用Task::Signal()
流程:
Client或者 Task的子类向Event Context注册事件。
Event Context将事件放入EventThread的Pool内。
EventThread 调用select 等待多个事件中任一个触发。
事件触发以后,EventThread调用 Event Context::process_event()。
调用 Task::signal()。
Task::signal()将task放入TaskThread的队列。
TaskThread调度相应的Task, 执行其Run()方法。
分享到:
相关推荐
**Darwin Streaming Server安装流程详解** Darwin Streaming Server(DSS)是一款强大的流媒体服务器,由Apple公司开发,主要用于提供实时传输协议(RTP)和实时流协议(RTSP)支持,同时也支持MPEG-4和MP3流协议。...
**Darwin Streaming Server (DSS) 搭建详解** Darwin Streaming Server 是Apple公司推出的一款开源流媒体服务器,主要用于发布和支持mp4和mov格式的媒体文件。它基于Real-Time Streaming Protocol (RTSP),能够实现...
目前主流的流媒体服务器有微软的windows media server、RealNetworks的Helixserver和苹果公司的Darwin Streaming Server. 微软的windows media server只能在windows2000 server和windows 2003 server下使用,不在...
**Darwin Streaming Server 5.5 知识详解** Darwin Streaming Server (DSS) 是一个开源的流媒体服务器,由Apple Inc. 开发并维护,主要用于实时和点播流媒体内容的传输。这个服务器是基于苹果公司的QuickTime技术,...
在Windows环境下配置DSS,我们需要先安装Perl环境,然后下载并安装Darwin Streaming Server的Windows版本。** 首先,让我们详细了解一下Perl。Perl是一种通用的、解释型的、动态的编程语言,它在系统管理、网络编程...
Darwin Streaming Server (DSS) 是一款开源的流媒体服务器,基于Apple的QuickTime技术,专为实时和点播流式传输多媒体内容而设计。它支持多种协议,如RTSP (Real Time Streaming Protocol),HTTP (Hypertext ...
**Darwin Streaming Server (DSS) 6.0.3 补丁文件详解** Darwin Streaming Server(DSS)是苹果公司开发的一款开源流媒体服务器软件,主要用于实时传输和点播多媒体内容,如音频和视频流。DSS支持多种协议,包括...
**Darwin Streaming Server (DSS)** 是苹果公司开发的一个开源流媒体服务器,用于实时和点播多媒体内容的传输。在本文中,我们将详细介绍如何在Windows上安装和使用DSS。 首先,从Apple.com上免费下载DSS软件。安装...
### Darwin Streaming Server 安装与配置详解 #### 一、前言 Darwin Streaming Server 是一款功能强大的流媒体服务器,支持多种流媒体协议和技术,包括实时传输协议/实时流协议 (RTP/RTSP)、MPEG-4 和 MP3 流等。...
dss中文资料,Apple官方网站上的,整理成chm离线使用
Darwin streaming server6.0.3安装补丁,修正了在32位linux上,Darwin streaming server6.0.3在执行Buildit时的类型错误和其他一些错误。
darwin streaming server #1
**正文** Darwin Streaming Server(DSS)是Apple公司开发的一款开源流媒体服务器,它基于...不断探索和实践,你将能够熟练掌握Darwin Streaming Server,为各种流媒体应用场景提供稳定高效的服务。
《Darwin Streaming Server 5.5.5 源代码深度解析》 Darwin Streaming Server (DSS) 是苹果公司研发的一款开源流媒体服务器,它主要用于实时传输和播放音视频内容。本文将深入剖析其5.5.5版本的源代码,揭示其核心...
darwin streaming server #2 e
### Darwin Streaming Server 6.0.3 安装方法详解 #### 一、概述 Darwin Streaming Server(DSS)是Apple开发的一款流媒体服务器软件,它可以用来分发H.264视频和AAC音频流。DSS 6.0.3版本提供了强大的功能和稳定...
darwin streaming server installation
在本文中,我们将深入探讨Darwin Streaming Server的中文开发资料,了解其核心组件和工作原理。 **QTSS (QuickTime Streaming Server)** 是DSS的核心服务程序,这个.chm文件很可能是QTSS的中文版API参考文档。CHM是...