下載地址(含CGI網關案例)html
HttpServer的特色
一、徹底採用IOCP模型,實現真正的異步IO,高併發、高可靠;python
二、支持4G以上文件下載;web
三、支持斷點續傳;windows
四、輕量級,體積小,服務器文件僅200多K,無任何依賴庫;跨域
五、支持CGI網關,經過CGI.xml可動態配置各類網關接口,實現動態交互;瀏覽器
六、內置上傳文件接口;緩存
點擊此處下載安全
1、命令行參數介紹服務器
啓動服務器: 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。
2、配置文件參數介紹
HttpServer可經過HttpServer.ini文件進行參數配置,參數更加豐富,是對命令行參數的補充。
WebPath : web網站的發佈路徑,等同於命令行參數"-W"。
HomePage:web網站的主頁,等同於命令行參數"-H"。
Port: web服務的端口號,等同於命令行參數"-P"。
TimeOut: 超時,單位秒,缺省值爲60秒。
MaxConn: 最大併發數,等同於命令行參數"-M",缺省值爲20000。
PostDataPath: 上傳數據的保存路徑,缺省值爲當前用戶的temp目錄。
一、使用場景一:用戶在上傳文件時,上傳文件保存的臨時路徑;
二、使用場景二: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),小於該值的文件會加載到內存中,後續訪問將再也不從磁盤中讀取而是直接讀內存。
3、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。
4、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腳本,並將腳本執行的結果返回給瀏覽器。
一、QUERY-SRING數據的傳遞
python/test1.do?key1=value1&key2=value2
"key1=value1&key2=value2"會經過命令行參數的方式傳遞給調用者。
python中爲:sys.argv[1],詳見案例:test2.py。
二、POST-DATA數據的傳遞
POST數據的傳遞經過讀取標準的輸入獲取,python中爲:sys.stdin.readline(),詳見案例:test1.py。
注意:
一、HttpServer沒有經過環境變量來傳遞QUERY-STRING;
二、CGI網關數據返回時,服務器會自動添加Content-Length字段(根據返回數據「\r\n\r\n」來計算HTTP響應頭和響應體的各自長度);
三、若是CGI網關返回數據中沒有"\r\n\r\n"來分割HTTP響應頭和響應體,則服務器會認爲響應數據是明文,並自動添加類型爲「text/plain」的響應頭,並返回給瀏覽器;
用戶可根據須要配置多個cgi子節點,用於處理不一樣類型的網關程序(或腳本)。 cgi配置的保留節點有兩個,一個是bat,一個是exe。對於windows下的bat格式腳本文件,是不須要指定執行程序,一樣exe文件也是。
網關配置文件以下:
python 網關文件案例:
BAT批處理網關文件案例:
exe網關文件案例:
5、內置上傳接口
接口名稱:command/upload.do
使用post命令,可將文件上傳到web發佈目錄。
若是要將文件上傳至web目錄的子目錄中,可經過path參數指定,以下
command/upload.do?path=subfolder,subfolder爲相對於web目錄中的子目錄。