Darwin 视频服务器6.0.3代码下载地址

Darwin 视频服务器6.0.3代码下载地址: http://dss.macosforge.org/

 

概述

本文先从理论上介绍几种大并发服务器的设计模式,然后分析Darwin Streaming Server的实现,从而为更好的理解Darwin视频服务器或者设计自己的视频服务器提供技术上的积累。

并发设计模式

阻塞的IO方式效率极低,这里不予讨论。非阻塞的IO分成两种,分别是非阻塞同步IO和非阻塞异步IO,对应的,Reactor和Proactor是高性能并发服务器设计中常见的两种模式,Reactor用于同步IO,Proactor用于异步IO。

无论是Reator还是Proactor,都包含了时间分离器和时间处理器。在接下来的对于Darwin视频服务器的分析中会发现其中也包含了事件分离器和事件处理器。

Darwin流媒体服务器

来看一下DarwinStreamingServer的架构,是不是采用了前面描述的两个模式那。Darwin流媒体服务器是由父进程及其fork出来的子进程构成的,子进程就是核心服务器。父进程的职责就是等待子进程退出。如果子进程出错退出,则父进程就会fork一个新的子进程,从而保证视频服务器继续提供服务。核心服务器的作用是充当VOD客户端与服务器模块之间的接口,VOD客户端采用RTP和RTSP协议向服务器发送请求并接收响应,服务器模块负责处理VOD客户端的请求并向VOD客户端发送数据包。核心服务器通过创建四种类型的线程来完成自己的工作:

 

  1. 服务器的主线程(Main Thread)。这个线程负责检查服务器是否需要关闭、记录状态信息、打印统计信息。
  2. 空闲任务线程(Idle Task Thread)。空闲任务线程管理一个周期性的任务队列。任务队列有两种类型:超时任务和套接口任务。
  3. 事件线程(Event Thread)。事件线程负责侦听套接口事件,比如收到RTSP请求和RTP数据包,然后把事件传递给任务线程。 
  4. 一个或者多个任务(Task)线程。任务线程从事件线程中接收RTSP和RTP请求,然后把请求传递到恰当的服务器模块进行处理,把数据包发送给客户端。缺省情况下,核心服务器为每一个处理器创建一个任务线程。

其中的事件线程就是Reactor模式中的事件分离器,任务线程就是Reactor中的事件处理器。

参考资料

  1. Proactor和Reactor模式_继续并发系统设计的扫盲,http://www.cppblog.com/kevinlynx/archive/2008/06/06/52356.html
  2. QuickTime Streaming Server Modules Programming Guide。
  3. Douglas C. Schmidt, Reactor - An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events

 

 

发布了137 篇原创文章 · 获赞 31 · 访问量 116万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章