开发分布式WebIm--1(设想)
1.基于xmpp協(xié)議的服務(wù)器都不提供用戶花名冊的功能,用其變通方式的花名冊功能效率太低。
2.Erlang語言我研究了兩天好不容易看懂了一個遍歷程序,再往下看我就失去了興趣。
3.手機(jī)上只能基于電信的CDMA連接,聯(lián)通的GPRS只能用IP方式連接,移動就干脆無法連接。
于是自主開發(fā)一個基于分布式的WebIm就緩緩的萌發(fā)于我的腦海中。
??? 隨后我在網(wǎng)上查閱了大量的資料,隨著一個問題又一個問題的提出與解決,一張又一張的流程圖做出來。我腦海中的方案逐漸清晰,這里我把一些心得寫一下,希望和朋友們分享。
1.Comet
Comet是一種服務(wù)器推技術(shù),我看了很多的介紹,大把大把的框架和協(xié)議基本把我繞暈了,我打過一陣退堂鼓,但是Comet最大的優(yōu)勢是節(jié)約帶寬,設(shè)想一下ajax技術(shù)輪詢服務(wù)器:3s一次連接,用基于Utf-8的編碼來發(fā)送一個HTTP頭加內(nèi)容估計是200byte,8個小時的流量是:200*20*60*8=1,920,000byte,一個月就是60M,太恐怖了,這樣的軟件肯定沒人用了。不得已逼得我繼續(xù)研究Comet,后來我發(fā)現(xiàn)Comet就是服務(wù)器端hold一段時間,保持和客戶端的連接而已,一句sleep就搞定了。當(dāng)然Comet是一個整體的瀏覽器解決方案,而我只是借用其中的HTTP用于通信,這點還是不同的。
2.IIS最大連接數(shù)
用sleep把線程hold住以后,我就關(guān)心IIS最多能支持多少個并發(fā)線程,這個太重要了,如果IIS只能同時并發(fā)幾十個線程,那么這個方案也是沒有意義的。網(wǎng)上找不到答案,用IIS最大連接數(shù)作為關(guān)鍵詞搜索,只能得到賣虛擬主機(jī)的商家。于是我自己測試,把WAS打開一測,IIS只能同時連接36個線程,我頓時心涼了半截!郁悶了一天,到處找資料都沒法解決,后來突然發(fā)現(xiàn)我系統(tǒng)是XP的(裝xp是因為我開發(fā)藍(lán)牙程序,只有xp的驅(qū)動),xp連接數(shù)是受限的。換到2003后馬上跑出了3966個連接(一個WAS最大同時連接數(shù)了)。但還有個問題,雖然性能計數(shù)器上顯示的是3966個連接,但多數(shù)線程還是處于等待狀態(tài)中,又怎么辦呢?
3.Web園
想要體會3967個連接同時運行嗎?打開IIS-應(yīng)用程序池-屬性-性能-Web園,把默認(rèn)的1改成100,馬上運行WAS,性能計數(shù)器上顯示的是3966個連接,再打開一個IE頁面,數(shù)據(jù)緩緩的顯示出來,IE進(jìn)度條被hold住,說明服務(wù)器端沒有釋放連接,同時性能計數(shù)器上顯示的是3967個連接,測試成功了!
?
for(int?i=0;i<100;i++)
{
???Response.Write(i);
???System.Threading.Thread.Sleep(3000);
}
?
4.Remoting
使用Web園以后,Application變量和Static變量都無法使用了。觀察任務(wù)管理器,你會發(fā)現(xiàn)出現(xiàn)了很多w3wp.exe程序,每個w3wp.exe進(jìn)程對應(yīng)一個Web園。Application變量和Static變量都無法跨進(jìn)程存在,所以進(jìn)程間的通訊只能使用數(shù)據(jù)庫或者Remoting了.我選擇使用Remoting是因為Remoting具備雙向通信和事件通知功能,這樣就大大節(jié)約了系統(tǒng)資源。設(shè)想4000個用戶在線1秒去Select一次數(shù)據(jù)庫查看自己的消息,那就需要數(shù)據(jù)庫0.25ms內(nèi)處理完這個select。我還沒有接觸過這種服務(wù)器,你有用過嗎?發(fā)出來眼饞一下吧。
總結(jié)
以上是生活随笔為你收集整理的开发分布式WebIm--1(设想)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看雪论坛精华23
- 下一篇: AndroidStudio检测不到模拟器