閑來(lái)無(wú)事跟朋友折騰了一個(gè)山寨百衲本的網(wǎng)站HelloCpp(
http://www.hellocpp.net)。界面我們都是外行,反正基本就是活脫脫一個(gè)山寨的
www.codeproject.com。不過(guò)開發(fā)過(guò)程中還是蠻有一些心得的。現(xiàn)在寫出來(lái)跟大家分享。有不對(duì)的地方請(qǐng)大家多多建議。
網(wǎng)站性能優(yōu)化之文件服務(wù)器分離技術(shù)
在WEB開發(fā)中,一個(gè)重要的性能問(wèn)題是IO問(wèn)題。通常,一個(gè)網(wǎng)站里會(huì)擁有包括圖片、RAR文件等一系列的文件,這些文件一般都比頁(yè)面要多很多而且大很多,
并且,這些文件也會(huì)比頁(yè)面訪問(wèn)更多次。這意味著,如果能優(yōu)化這部分IO的性能,則對(duì)整個(gè)網(wǎng)站的性能都會(huì)有所提高。
在HelloCpp(http://www.hellocpp.net)的開發(fā)過(guò)程中,我們使用了網(wǎng)站服務(wù)器與文件服務(wù)器相分離的技術(shù)。即除了頁(yè)面以外的圖片、腳本、資源等文件,都是部署在與網(wǎng)站頁(yè)面所在的服務(wù)器不同的服務(wù)器上的。而通過(guò)網(wǎng)站上傳文件的時(shí)候,也會(huì)由后臺(tái)程序保存在遠(yuǎn)程文件服務(wù)器上。這里,保存通常有兩種做法:
1.使用FTP服務(wù)來(lái)遠(yuǎn)程保存文件
2.使用WebService來(lái)遠(yuǎn)程保存文件
HelloCpp
中使用的是第二種方式,因?yàn)槭褂玫谝环N方式的話,文件服務(wù)器需要額外開放一個(gè)FTP服務(wù),這樣就有更多被攻擊的危險(xiǎn)。編寫一個(gè)遠(yuǎn)程保存文件的
WebService相當(dāng)簡(jiǎn)單,只要傳遞文件的數(shù)據(jù)Stream即可。另外,文件服務(wù)器還可以采取一些輕量級(jí)的配置方法,盡可能地提高IO性能。也可以配
置一個(gè)冗余的文件服務(wù)器,來(lái)提供集群訪問(wèn),具體細(xì)節(jié)請(qǐng)參考其他專業(yè)的文檔。
-----待續(xù)
最后,歡迎支持HelloCpp(http://www.hellocpp.net),中國(guó)人自己的CodeProject編程資料庫(kù)
閑的無(wú)聊,翻了翻CSDN的博客,專家列表里好多專家啊。挑了幾個(gè)看了看,發(fā)現(xiàn)大家都好高深莫測(cè),哎,看來(lái)需要再多學(xué)點(diǎn)東西了……技術(shù)跟不上了……
1.支持正常的顯示
2.支持腳本操作(Method和Property)
3.支持事件:<script for=id event=event>的形式了。但是addEventListener的形式還沒(méi)試驗(yàn)過(guò)
稍后放文章出來(lái)……
最近在使用DirectShow開發(fā)D3D和視頻相結(jié)合的內(nèi)容,感覺(jué)有些怪異,很多視頻在暴風(fēng)里播放正常而在DirectShow Filter Chain里總是Connect Pin失敗,最后感覺(jué)到應(yīng)該是我的Filter有問(wèn)題.遂Google之.發(fā)現(xiàn)一篇
利用DirectShow開發(fā)自己的Filter ,參考之,權(quán)做備忘
很奇怪,一個(gè)XML文檔,使用gb2312編碼死活解析不過(guò)去,使用utf-8就可以了。嗯,后來(lái)查了jquery的文檔,確實(shí)要求UTF-8,以留本文權(quán)做備案
廢話不多說(shuō)了,直接引用MS的原話:
[quote]
從 MSXML 3.0 版開始,
XMLHTTP 請(qǐng)求對(duì)象使用 Urlmon.dll。如果在調(diào)用
open 方法時(shí)將
async 參數(shù)設(shè)置為 VARIANT_TRUE,則 URLMON 使用消息隊(duì)列機(jī)制來(lái)通知應(yīng)用程序數(shù)據(jù)何時(shí)可用,并更改
XMLHTTP 請(qǐng)求對(duì)象的
readyState 屬性。
在 Visual C++ 應(yīng)用程序中,必須使用消息泵來(lái)接收和調(diào)度消息。如果應(yīng)用程序不能正確地處理傳入的消息,則由于
XMLHTTP 請(qǐng)求對(duì)象的
readystate 屬性未被更改,因此應(yīng)用程序會(huì)停止響應(yīng)(掛起)。
[/quote]
參考URL
http://support.microsoft.com/kb/303326/zh-cn?spid=1198&sid=global
別的廢話不多說(shuō)了,基本流程和TCP下一樣,只不過(guò)說(shuō)一點(diǎn)需要注意的。
在WSARecvFrom成功以后,IOCP得到了投遞,處理完了這個(gè)數(shù)據(jù),這個(gè)時(shí)候應(yīng)該重新發(fā)起一個(gè)WSARecvFrom投遞了,這個(gè)時(shí)候要特別注意,
不要重新分配一個(gè)Overlapped,而要復(fù)用當(dāng)前這個(gè),不然在GetQueued的時(shí)候,會(huì)報(bào)錯(cuò),報(bào)0xC000000005,讀取0x00000010錯(cuò)誤。
網(wǎng)上的IOCP都是TCP的,UDP的資料太少,這里提出一個(gè)要注意的地方,以使后來(lái)人避免走彎路
一定要用IIS來(lái)調(diào)試ASP.NET WebApplication,不能用Development WebServer啊。。不然global.asax會(huì)執(zhí)行不到
RT,一點(diǎn)也不如WebApplication好用