日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

开发分布式WebIm--1(设想)

發(fā)布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开发分布式WebIm--1(设想) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
開發(fā)一個手機IM系統(tǒng)的想法有很久了,最先我定位于基于xmpp協(xié)議的實現(xiàn)方式,為此我安裝了Openfire和spark,搭建了一套完善的系統(tǒng)用于研究,spark的debug模式對我分析xmpp協(xié)議起到了重要的作用,隨后我又安裝了agsxmpp sdk,在一番折騰下我終于完成了agsxmpp示例客戶端與spark客戶端的通訊(Openfire有些地方不是100%實現(xiàn)了xmpp協(xié)議)。有興趣的朋友可以看我《agsxmpp與Openfire聯(lián)通》這篇文章。后來我又用過ejabberd作為服務器,ejabberd挺好的,沒怎么擺弄就能順利的和我的客戶端相連。但下面這些問題始終無法解決,讓我退卻了,

1.基于xmpp協(xié)議的服務器都不提供用戶花名冊的功能,用其變通方式的花名冊功能效率太低。

2.Erlang語言我研究了兩天好不容易看懂了一個遍歷程序,再往下看我就失去了興趣。

3.手機上只能基于電信的CDMA連接,聯(lián)通的GPRS只能用IP方式連接,移動就干脆無法連接。

于是自主開發(fā)一個基于分布式的WebIm就緩緩的萌發(fā)于我的腦海中。

??? 隨后我在網(wǎng)上查閱了大量的資料,隨著一個問題又一個問題的提出與解決,一張又一張的流程圖做出來。我腦海中的方案逐漸清晰,這里我把一些心得寫一下,希望和朋友們分享。

1.Comet

  Comet是一種服務器推技術(shù),我看了很多的介紹,大把大把的框架和協(xié)議基本把我繞暈了,我打過一陣退堂鼓,但是Comet最大的優(yōu)勢是節(jié)約帶寬,設想一下ajax技術(shù)輪詢服務器:3s一次連接,用基于Utf-8的編碼來發(fā)送一個HTTP頭加內(nèi)容估計是200byte,8個小時的流量是:200*20*60*8=1,920,000byte,一個月就是60M,太恐怖了,這樣的軟件肯定沒人用了。不得已逼得我繼續(xù)研究Comet,后來我發(fā)現(xiàn)Comet就是服務器端hold一段時間,保持和客戶端的連接而已,一句sleep就搞定了。當然Comet是一個整體的瀏覽器解決方案,而我只是借用其中的HTTP用于通信,這點還是不同的。

2.IIS最大連接數(shù)

  用sleep把線程hold住以后,我就關心IIS最多能支持多少個并發(fā)線程,這個太重要了,如果IIS只能同時并發(fā)幾十個線程,那么這個方案也是沒有意義的。網(wǎng)上找不到答案,用IIS最大連接數(shù)作為關鍵詞搜索,只能得到賣虛擬主機的商家。于是我自己測試,把WAS打開一測,IIS只能同時連接36個線程,我頓時心涼了半截!郁悶了一天,到處找資料都沒法解決,后來突然發(fā)現(xiàn)我系統(tǒng)是XP的(裝xp是因為我開發(fā)藍牙程序,只有xp的驅(qū)動),xp連接數(shù)是受限的。換到2003后馬上跑出了3966個連接(一個WAS最大同時連接數(shù)了)。但還有個問題,雖然性能計數(shù)器上顯示的是3966個連接,但多數(shù)線程還是處于等待狀態(tài)中,又怎么辦呢?

3.Web園

  想要體會3967個連接同時運行嗎?打開IIS-應用程序池-屬性-性能-Web園,把默認的1改成100,馬上運行WAS,性能計數(shù)器上顯示的是3966個連接,再打開一個IE頁面,數(shù)據(jù)緩緩的顯示出來,IE進度條被hold住,說明服務器端沒有釋放連接,同時性能計數(shù)器上顯示的是3967個連接,測試成功了!

?


for(int?i=0;i<100;i++)
{
???Response.Write(i);
???System.Threading.Thread.Sleep(
3000);

}

?

4.Remoting

使用Web園以后,Application變量和Static變量都無法使用了。觀察任務管理器,你會發(fā)現(xiàn)出現(xiàn)了很多w3wp.exe程序,每個w3wp.exe進程對應一個Web園。Application變量和Static變量都無法跨進程存在,所以進程間的通訊只能使用數(shù)據(jù)庫或者Remoting了.我選擇使用Remoting是因為Remoting具備雙向通信和事件通知功能,這樣就大大節(jié)約了系統(tǒng)資源。設想4000個用戶在線1秒去Select一次數(shù)據(jù)庫查看自己的消息,那就需要數(shù)據(jù)庫0.25ms內(nèi)處理完這個select。我還沒有接觸過這種服務器,你有用過嗎?發(fā)出來眼饞一下吧。

總結(jié)

以上是生活随笔為你收集整理的开发分布式WebIm--1(设想)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。