2012-02-15 97 views
3

我想要實現一個高性能的rtsp服務器來處理vod請求---它只處理信令請求,它不需要流媒體文件。我已經完成了一個基於Mina網絡框架的Java編寫的版本,性能似乎不是很高。高性能rtsp服務器

就我所知,高性能的SIP服務器(例如VoIP服務器)是用C編寫的(例如OpenSIPS,Kamailo),我應該使用C還是C++來實現我的項目以獲得顯着的性能改進?

順便說一句。我找到了OpenSER爲什麼用C編寫的原因的一些解釋: 「另一方面,它是垃圾收集器,在使用Java開發SIP應用程序時可能會導致很多麻煩,用Java編寫的大負載服務器會停止工作垃圾收集器正在清理內存,由垃圾收集器引起的延遲甚至可能超過10秒,這種延遲是不可接受的「 這是現在的事實,這意味着我也應該使用C嗎?

+0

理論上,爲了「提高」Java應用程序的性能,應使用其他編程語言(如彙編/ C/C++)優化本地OS中的動態鏈接庫的包裝。這可以使用像JNI或JNA這樣的Java技術來完成。一些項目使用這種方法,如VLCJ(java綁定到libVLC引擎,VCC媒體播放器中使用的一組GCC +庫和插件) – 2012-02-15 08:08:08

回答

5

這裏有大量的變量,語言可能不是決定因素。 MINA的作者Trustin Lee後來創建了Netty,確實提供了非常高的性能。 Lee himself says由於它提供的一些功能與核心過於緊密相關,MINA的「性能相對較差」。因此,在完全重寫所有內容之前,你可以先看看Netty。

如果您正在使用Oracle的JVM,您使用的識別代碼熱點的極其優化的運行時系統(因此稱爲「熱點」),並積極地在運行時優化他們。自從你可以說,事實上,Java代碼運行速度比C代碼慢的時間已經很長了。 寫得很好,經過優化 C代碼可能在某些選擇任務中表現出等效的Java代碼,但從此處的泛化可能不再合適,當然,您的代碼必須承擔JVM肩負的一些負擔你用Java。另請注意,您可以對tune the JVM's garbage collector執行以下幾項操作,例如,爲了更好地保持一致性並縮短足跡和長時間暫停的間隔時間。

顯然C有幾個優點(有時候靠近機器有時候就是就是你想要的),對於某些任務顯式內存管理也是如此。

3

您是否將您的rtsp服務器與Wowza進行了比較? 如果你的rtsp服務器的性能比Wowza低,我相信你可以在不改變語言的情況下提高它的性能,否則,如果Wowza與你的服務器有類似的性能,那麼它表示Java不能滿足性能要求,也許你應該考慮使用c/C++代替。