新SIP Proxy Server開發,啓航篇

  一直就想寫一個SIP軟交換平臺,目前已經收集了一些資料,也拆解過兩個.Net中的SIP開源項目,曾經看過open ser,還有目前商用的海狼與SIPSYS的平臺,自己原來的公司曾經就使用過SIPSYS(原型爲open ser開發),在公司時,曾經就開源的Donet下的SIP Proxy進行修進,嘗試搭建一個基礎模型,用於測試功能模塊的。但是總感覺架構不好,不適合業務擴展,於是同期也在參考電信3G的IMS模型結構,與其對比目前的開源IPPBX架構的不同。這些都爲自己構建一個SIP軟交換平臺,做準備。這兩個月在拆解ASP.Net的架構及remoting,還有HTTPListener。


  項目使用.Net開發,目前UDP的傳輸層已經開始寫完了(全異步,初稿),以及正在搭建上層體系結構,使用.Net結構開發服務器端程序,需要考慮異步IO、線程池、對象內存池控制、SIP解析引擎等。

  用.Net作爲網絡服務器端開發的不多,一般使用Linux C開發比較常見,所以一直在考慮性能是否能達到要求?而另一方面,在不斷的搜索資料,查到很多資料說,.Net可能不支持IO完成端口(IOCP),或有備用解決方案是自己調用平臺IOCP API來實現的線程池,很是讓人鬱悶。直到有一天,終於被我查到了,在.Net 線程池裏有25個工作線程和25個IO完成端口線程(IOCP),它是包涵完成端口的。但如何使用呢?--使用異步調用。當你在Windows 2003平臺,使用異步調用BeginSend,EndSend,發送數據時,再查詢線程池中剩餘的IOCP線程數會減少。當然,你也不能光指着它,它只是幫你能更好的利用CPU資源。不過,這證明了一點,在上面架構一個服務器平臺,是有機會的。ASP.Net不也是託管代碼?它是如何現實高性能的?雖然它跟你的代碼在底層上有些不同(它的HTTP解析器放在內核級http.sys),但上層仍是一個託管.Net環境,仍是一個能有充分發揮的應用平臺,這點很重要。

  網上高性能的項目例子不多見,哪位朋友有好的介紹?在下感激不盡。

  流程,我先把整體架構搭建起來(各模塊、及各模塊之間的通訊架構),然後再逐一細花每個模塊的的功能,初期可能每個模塊的功能可能不完善,或者效率不高(例如明知道這個模塊的New的對象過多,用另一種方法更好的內存池,但我先不這樣做,等大的架構穩定後,再回頭來完善它)。這樣,好使自己有一個整體的思路。Linux最早的版本,只有8000行代碼,完成的是基本功能,而現在的Linux有超這百萬行的代碼,是個迭代的過程。知道這一點,我們啓航,上路~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章