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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章