首頁>Club>
5
回覆列表
  • 1 # 夜闌風靜細雨

    FreeSWITCH 使用執行緒模型來處理併發請求,每個連線都在單獨的執行緒中進行處理。這不僅能提供最大強度的併發,更重要的是,即使某路電話發生問題,也隻影響到它所在的執行緒,而不會影響到其它電話。FreeSWITCH 的核心非常短小精悍,這也是保持穩定的關鍵。所有其它功能都在外圍的模組中。模組是可以動態載入(以及解除安裝)的,在實際應用中可以只加載用到的模組。外圍模組透過核心提供的 Public API 與核心進行通訊,而核心則透過回撥機制執行外圍模組中的程式碼。

    核心

    FS Core 是 FreeSWITCH 的核心,它包含了關鍵的資料結構和複雜的程式碼,但這些程式碼只出現在核心中,並保持了最大限度的重用。外圍模組只能透過 API 呼叫核心的功能,因而核心執行在一個受保護的環境中,核心程式碼都經過精心的編碼和嚴格的測試,最大限度地保持了系統整體的穩定。

    核心程式碼保持了最高度的抽象,因而它可以呼叫不同功能,不同協議的模組。同時,良好的 API 也使得編寫不同的外圍模組非常容易。

    資料庫

    FreeSWITCH 的核心除了使用內部的佇列、雜湊表儲存資料外,也使用外部的 SQL 資料庫儲存資料。當前,系統的核心資料庫使用 SQLite,預設的儲存位置是 db/core.db 。 使用外部資料庫的好處是--查詢資料不用鎖定記憶體資料結構,這不僅能提供效能,而且降低了死鎖的風險,保證了系統穩定。命令 show calls、show channels 等都是直接從資料庫中讀取內容並顯示的。由於 SQLite 會進行讀鎖定,因此不建議直接讀取核心資料庫。

    系統對資料庫操作做了最佳化,在高併發狀態時,核心會盡量將幾百條 SQL 一齊執行,這大大提高了效能。但在低併發的狀態下執行顯得稍微有點慢,如一個 channel 已經建立了,但還不能在 show channels 中顯示;或者,一個 channel 已經 destroy 了,還顯示在 show channels 中。但由於這些資料只用於查詢,而不用於決策,所以一般沒什麼問題。

    除核心資料庫外,系統也支援使用 ODBC 方式連線其它資料庫,如 PostgreSQL、MySQL等。某些模組,如 mod_sofia、mod_fifo等都有自己的資料庫(表)。如果在 *nix 類系統上使用 ODBC,需要安裝 UnixODBC,並進行正確的配置,

  • 中秋節和大豐收的關聯?
  • 《小魔仙》裡三位魔仙的扮演者最後變成什麼樣子了?