天天看點

HttpServer:一款Windows平台下基于IOCP模型的高并發輕量級web伺服器

下載下傳位址(含CGI網關案例)

HttpServer的特點

1、完全采用IOCP模型,實作真正的異步IO,高并發、高可靠;

2、支援4G以上檔案下載下傳;

3、支援斷點續傳;

4、輕量級,體積小,伺服器檔案僅200多K,無任何依賴庫;

5、支援CGI網關,通過CGI.xml可動态配置各種網關接口,實作動态互動;

6、内置上傳檔案接口;

點選此處下載下傳

一、指令行參數介紹

啟動伺服器: HttpServer.exe -W d:\web -H index.html -P 80 -M 10000

-W : web網站的釋出路徑,如:d:\web,如果路徑中有空格,可使用雙引号。

如不指定,則會在目前服務運作的目錄下建立web目錄,并以此為web網站目錄。

-H :web網站的首頁,如:index.html,

如果不指定首頁,則顯示web目錄的檔案清單,可作為簡單的檔案伺服器使用。

-P : web服務的端口号,預設值為80。

-M :最大并發量,預設值為20000。

其它參數(後面不帶值,參數存在則表示容許或使用):

-AllowUpload : 容許上傳

-CacheM :使用緩存(具體含義見下節的"UseCacheMem"字段)

-CacheC : 使用緩存(具體含義見下節的"UseCacheClass"字段)

預設值是指,如果該指令參數不指定,伺服器使用的預設參數。

HttpServer也可以通過配置檔案進行參數設定,配置檔案為HttpServer.ini。

二、配置檔案參數介紹

HttpServer可通過HttpServer.ini檔案進行參數配置,參數更加豐富,是對指令行參數的補充。

WebPath : web網站的釋出路徑,等同于指令行參數"-W"。

HomePage:web網站的首頁,等同于指令行參數"-H"。

Port: web服務的端口号,等同于指令行參數"-P"。

TimeOut: 逾時,機關秒,預設值為60秒。

MaxConn: 最大并發數,等同于指令行參數"-M",預設值為20000。

PostDataPath: 上傳資料的儲存路徑,預設值為目前使用者的temp目錄。

   1、使用場景一:使用者在上傳檔案時,上傳檔案儲存的臨時路徑;

   2、使用場景二:post請求時,如果使用者post資料過大,超過"MaxPostCacheFileSize"字段指定的閥值, 則轉為檔案存儲,防止記憶體使用過大;

MaxPostCacheFileSize: POST請求時,接收POST資料cache緩存的最大值,如果超過該值,則将緩存轉存為檔案,機關為位元組BYTE;

MaxUploadFileSize:最大上傳檔案尺寸,機關M位元組,預設值為2G。

UseCacheMem:是否使用緩存,預設值為0,表示不使用。 如使使用緩存,則伺服器會用空間換時間,預先開辟若幹連續的大記憶體塊,并重載malloc和free函數,在預先開辟的大記憶體塊中尋找可用的“碎片化”記憶體,進而減少在高并發下頻繁的申請和銷毀記憶體導緻的速度變慢。

UseCacheClass:是否使用結構體(struct/class)緩存,預設值為0,表示不使用。 如使用該值,則伺服器會用空間換時間,即:根據MaxConn指定的并發數,預先開辟出指定的記憶體空間, 如果MaxConn為2萬,則會開辟對應2萬個結構體(struct/class)用于儲存HTTP會話時的上下文(context)資料。 同上,該值也是為了減少在高并發下頻繁的申請和銷毀記憶體導緻的速度變慢。

UseMappingFile: 是否使用Mapping File方式通路磁盤檔案,預設值為1,表示使用。

AccessControlAllowOrigin: 是否容許跨域,預設值1,表示容許。

PrintMessage:是否在控制台輸出HTTP請求,預設值1,表示列印輸出。

注: 高并發時務必關閉控制台輸出!!!

AllowUpload:是否容許上傳,預設值為0,表示不容許。

AllowCacheFile:是否容許檔案緩存,預設值為1,表示容許,該值有效時,會對檔案進行緩存,避免頻繁的進行磁盤檔案操作。

MaxCacheFileSize:最大緩存的檔案尺寸,預設值為5(機關M),小于該值的檔案會加載到記憶體中,後續通路将不再從磁盤中讀取而是直接讀記憶體。

三、Content-Type類型設定

通過ContentType.ini該配置檔案,使用者可添加指定檔案類型的Content-Type類型,當浏覽器從伺服器讀取檔案時,

伺服器會根據該配置檔案傳回指定的Content-Type給浏覽器。

配置格式為如下,.檔案擴充名:Content-Type

.mp4:video/mp4,表示如果是mp4檔案,則Content-Type為video/mp4。

.cc:text/plain,表示如果是cc檔案,則content-Type為text/plain。

四、CGI網關設定

CGI網關設定在CGI.xml檔案中。各節點含義如下:

path:CGI網關檔案所在的目錄,這裡是全路徑,該路徑不一定在釋出的web目錄下(不在web目錄下會更安全)。

timeout:執行網關程式的逾時,機關秒,預設值為10秒,防止有的網關程式不退出,或長時間不退出。

cgi:子節點,每個cgi子節點代表一個CGI網關類型。

cgi/name:該CGI節點名稱,比如python,表示該CGI中的網關檔案是python腳本。

cgi/exe:執行該腳本的應用程式全路徑,如:c:\python25\python.exe。

cgi/action:響應配置,該節點代表一個需要處理的Http請求指令(在服務端則為一個應用),該節點有兩個字段,如下:

cgi/action/appname:url中的請求指令(應用名),如:python/test1.do

cgi/action/filename:處理上述請求的檔案,如:test1.py,該檔案必須在上述path節點指定的目錄中。

說明:當使用者發送 http://server:port/python/test1.do請求時,網關會執行test1.py腳本,并将腳本執行的結果傳回給浏覽器。

1、QUERY-SRING資料的傳遞

python/test1.do?key1=value1&key2=value2

"key1=value1&key2=value2"會通過指令行參數的方式傳遞給調用者。

python中為:sys.argv[1],詳見案例:test2.py。

2、POST-DATA資料的傳遞

POST資料的傳遞通過讀取标準的輸入擷取,python中為:sys.stdin.readline(),詳見案例:test1.py。

注意:

1、HttpServer沒有通過環境變量來傳遞QUERY-STRING;

2、CGI網關資料傳回時,伺服器會自動添加Content-Length字段(根據傳回資料“\r\n\r\n”來計算HTTP響應頭和響應體的各自長度);

3、如果CGI網關傳回資料中沒有"\r\n\r\n"來分割HTTP響應頭和響應體,則伺服器會認為響應資料是明文,并自動添加類型為“text/plain”的響應頭,并傳回給浏覽器;

使用者可根據需要配置多個cgi子節點,用于處理不同類型的網關程式(或腳本)。 cgi配置的保留節點有兩個,一個是bat,一個是exe。對于windows下的bat格式腳本檔案,是不需要指定執行程式,同樣exe檔案也是。

點選此處下載下傳,網關案例檔案在cgi-bin目錄中

網關配置檔案如下:

HttpServer:一款Windows平台下基于IOCP模型的高并發輕量級web伺服器

python 網關檔案案例:

HttpServer:一款Windows平台下基于IOCP模型的高并發輕量級web伺服器

BAT批處理網關檔案案例:

HttpServer:一款Windows平台下基于IOCP模型的高并發輕量級web伺服器

exe網關檔案案例:

HttpServer:一款Windows平台下基于IOCP模型的高并發輕量級web伺服器

五、内置上傳接口

接口名稱:command/upload.do

使用post指令,可将檔案上傳到web釋出目錄。

如果要将檔案上傳至web目錄的子目錄中,可通過path參數指定,如下

command/upload.do?path=subfolder,subfolder為相對于web目錄中的子目錄。

HttpServer:一款Windows平台下基于IOCP模型的高并發輕量級web伺服器

繼續閱讀