两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

用于web服務(wù)器的方法和系統(tǒng)的制作方法

文檔序號(hào):6597789閱讀:184來源:國知局
專利名稱:用于web服務(wù)器的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及web服務(wù)器技術(shù),具體的說本發(fā)明提供一種新型的web服務(wù)器系統(tǒng)以 及服務(wù)器端的動(dòng)態(tài)網(wǎng)頁生成方法。
背景技術(shù)
web服務(wù)器是基于互聯(lián)網(wǎng)的信息獲得的主要裝置,它接受用戶的信息請(qǐng)求,并將用 戶請(qǐng)求的結(jié)果以web頁面發(fā)給用戶,從而形成信息交換。目前,web服務(wù)器一般使用http 協(xié)議,web頁面一般使用基于html或xml標(biāo)記的代碼,它由位于客戶端的瀏覽器(如ie, firefox,opera等)負(fù)責(zé)解釋和顯示。目前Web服務(wù)器系統(tǒng)主要有Apache、IIS等。在web服務(wù)器發(fā)展的初期,主要以靜態(tài)的html頁面為主,對(duì)于有交互性要求的請(qǐng) 求,則采用CGI方式進(jìn)行。睡著互聯(lián)網(wǎng)的高速發(fā)展,web應(yīng)用的需求日益增加,CGI方式的弊端日益突出,主 要在于,CGI方式限制比較多,尤其是用CGI生成web頁面,效率非常低,工作量巨大。于是,動(dòng)態(tài)網(wǎng)頁技術(shù)隨之產(chǎn)生,所謂動(dòng)態(tài)網(wǎng)頁,是指在基于html或xml標(biāo)記的web 頁面中嵌入運(yùn)行于服務(wù)器端的編程語言代碼(通過特定的標(biāo)記),由服務(wù)器將所述web頁面 內(nèi)容以及web頁面中包含的編程語言執(zhí)行結(jié)果所形成的內(nèi)容一起發(fā)往客戶端,由于所述編 程語言是嵌在原來的靜態(tài)頁面中,所以,整個(gè)web頁面的安排,包括以后的修改,基本上不 需要編程語言來負(fù)責(zé),因而,效率比CGI方式提高很多。如php,asp, jsp等技術(shù)。ASP (Active Server Page),是一種包含了使用 VB Script 或 Jscript 腳本程序代 碼的網(wǎng)頁。當(dāng)瀏覽器瀏覽ASP網(wǎng)頁時(shí),Web服務(wù)器就會(huì)根據(jù)請(qǐng)求生成相應(yīng)的HTML代碼然后 再返回給瀏覽器,這樣瀏覽器端看到的就是動(dòng)態(tài)生成的網(wǎng)頁。PHP也是一種用來制作動(dòng)態(tài)網(wǎng)頁的服務(wù)器端腳本語言。通過PHP和HTML創(chuàng)建頁 面。當(dāng)訪問者打開網(wǎng)頁時(shí),服務(wù)器端便會(huì)處理PHP指令,然后把其處理結(jié)果送到訪問者的瀏 覽器上面,就好像ASP —樣。JSP (Java Server Images)技術(shù)有點(diǎn)類似ASP技術(shù),它是在傳統(tǒng)的網(wǎng)頁HTML文件 (*. htm, *· html)中插入Java程序段(Scriptlet)和JSP標(biāo)記(tag),從而形成JSP文件 O. jsp)ο上述三者都提供在HTML代碼中混合某種程序代碼、由語言引擎解釋執(zhí)行程序代 碼的能力。但JSP代碼被編譯成Servlet并由Java虛擬機(jī)解釋執(zhí)行,這種編譯操作僅在對(duì) JSP頁面的第一次請(qǐng)求時(shí)發(fā)生。在ASP、PHP、JSP環(huán)境下,HTML代碼主要負(fù)責(zé)描述信息的顯 示樣式,而程序代碼則用來描述處理邏輯。普通的HTML頁面只依賴于Web服務(wù)器,而ASP、 PHP、JSP頁面需要附加的語言引擎分析和執(zhí)行程序代碼。程序代碼的執(zhí)行結(jié)果被重新嵌入 到HTML代碼中,然后一起發(fā)送給瀏覽器。ASP、PHP、JSP三者都是面向Web服務(wù)器的技術(shù), 客戶端瀏覽器不需要任何附加的軟件支持。(來源百度百科)ASP. NET是ASP的升級(jí)平臺(tái),它把基于通用語言的程序在服務(wù)器上運(yùn)行。不像以前 的ASP即時(shí)解釋程序,而是將程序在服務(wù)器端首次運(yùn)行時(shí)進(jìn)行編譯,執(zhí)行效果,比一條一條的解釋強(qiáng)很多,執(zhí)行效率大大的提高。(來源百度百科)ASP. net可以運(yùn)行在Web應(yīng)用軟件開發(fā)者的幾乎全部的平臺(tái)上。通用語言的基本 庫,消息機(jī)制,數(shù)據(jù)接口的處理都能無縫的整合到ASP. net的Web應(yīng)用中。ASP.net同時(shí)也 是language-ind印endent語言獨(dú)立化的,所以,用戶可以選擇一種最適合你的語言來編寫 你的程序,或者把用戶的程序用很多種語言來寫,現(xiàn)在已經(jīng)支持的有C#,VB.NET,JScript. NET, managedC++,J#。(來源百度百科)為實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁,web服務(wù)器一般將特定的請(qǐng)求頁面,通過特定的接口,轉(zhuǎn)發(fā)至特 定的模塊(或程序)進(jìn)行處理。現(xiàn)有的web服務(wù)器技術(shù),存在以下問題1.系統(tǒng)過于復(fù)雜和龐大,如jsp和asp. net,其本身耗費(fèi)的資源和復(fù)雜度,比web 應(yīng)用本身可能大許多倍;2.效率低下,如asp,php是解釋型的腳本語言,jsp是偽編譯的虛擬機(jī)語言,其運(yùn) 行速度遠(yuǎn)低于c/c++數(shù)倍乃至更大。而asp. net雖然號(hào)稱能編譯,但其所面向?qū)ο蟮倪\(yùn)行 環(huán)境本身準(zhǔn)備花的代碼,遠(yuǎn)遠(yuǎn)超過應(yīng)用本身代碼3.兼容性不佳,如asp. net在windows以外的平臺(tái)上,使用非常受限4.系統(tǒng)的獨(dú)立性很差,過于依賴太多的組件,如asp. net5.對(duì)于技術(shù)人員,需要額外關(guān)注和學(xué)習(xí)的東西太大,變化太快,如asp. net6.安全性差,這主要在于1.因系統(tǒng)復(fù)雜而致,如asp. net ;2.因代碼是明碼而異 受攻擊,如php和asp ;7.缺乏全局性的訪問控制機(jī)制,每個(gè)頁面之間的邏輯關(guān)系很難控制,或需比較大 的代價(jià),如Php中session的使用;本發(fā)明將提出一種web服務(wù)器系統(tǒng)和方法,用于解決以上問題。

發(fā)明內(nèi)容
本發(fā)明提供一種動(dòng)態(tài)網(wǎng)頁生成方法,即使用c/c++代碼作為嵌入web頁面的編程 語言,所述c/c++代碼在服務(wù)器端被編譯成二進(jìn)制機(jī)器代碼直接在CPU處運(yùn)行。同時(shí),本發(fā)明還提供一種web服務(wù)器,其具有web服務(wù)器管理的臨時(shí)存儲(chǔ)空間,供 多個(gè)/次動(dòng)態(tài)頁面中的編程語言代碼共享數(shù)據(jù)所用,技術(shù)方案一種服務(wù)器端動(dòng)態(tài)網(wǎng)頁生成的方法,包括在基于html或xml標(biāo)記的web頁面中 包含運(yùn)行于服務(wù)器端的編程語言代碼(通過編程語言標(biāo)記標(biāo)識(shí)),由服務(wù)器將所述web頁 面內(nèi)容以及web頁面中包含的編程語言執(zhí)行結(jié)果所形成的內(nèi)容一起發(fā)往客戶端,其特征在 于所述編程語言是c語言或c++語言,所述c/c++代碼以編譯后的所述服務(wù)器CPU的機(jī)器 代碼形式運(yùn)行。本發(fā)明所述的方法,其特征在于,所述c/c++代碼在第一次運(yùn)行時(shí)被編譯。本發(fā)明所述的方法,其特征在于,將嵌入c/c++代碼的html頁面,轉(zhuǎn)換為一中間c/ c++源代碼文件,通過現(xiàn)有的專用或通用c/c++編譯器對(duì)中間文件進(jìn)行編譯。所述轉(zhuǎn)換,可以這樣進(jìn)行將編程語言標(biāo)記以外的每段html文本,分別以一條或多條輸出語句(調(diào)用一輸出函數(shù))替代,將該段文本(或一部分)作為所述輸出語句所調(diào)用函數(shù)的參數(shù);將編程語言標(biāo)記以內(nèi)的c/c++代碼與上述轉(zhuǎn)換后的輸出語句代碼按其原來的先 后順序一起構(gòu)成一函數(shù),函數(shù)使用預(yù)先定義的名稱和參數(shù)定義;為上述轉(zhuǎn)換后的代碼添加上適當(dāng)?shù)念^文件或/及系統(tǒng)調(diào)用定義;所述編譯結(jié)果可以是可執(zhí)行文件(通過Cgi接口被服務(wù)器調(diào)用),或者共享對(duì)象 (so) /動(dòng)態(tài)連接庫(dl 1),后者可通過服務(wù)器接口直接調(diào)用,也可通過另一被服務(wù)器調(diào)用的 模塊所調(diào)用。本發(fā)明所述的方法,其特征在于,使用專用的編譯器,直接編譯所述包含c/c++代 碼的html頁面。本發(fā)明所述的方法,其特征在于,所述編譯器內(nèi)置web服務(wù)器內(nèi),或作為服務(wù)器的 一個(gè)模塊。本發(fā)明所述的方法,其特征在于,使用另一編程語言標(biāo)記來標(biāo)記全局函數(shù)或變量, 該標(biāo)記內(nèi)的代碼在編譯時(shí),自動(dòng)被抽出并放置在html文本所在函數(shù)的外面/前面。本發(fā)明所述的方法,其特征在于,編譯本發(fā)明所述的動(dòng)態(tài)頁面時(shí),還包括將所述 web頁面中對(duì)web頁面的處理無意義的字符刪除的步驟,如空格,回車等。本發(fā)明所述的方法,其特征在于,編譯本發(fā)明所述的動(dòng)態(tài)頁面時(shí),還包括將所述 web頁面中html或xml標(biāo)記語言進(jìn)行壓縮的步驟。如對(duì)于原文為text_a的html文本,本 發(fā)明所述的方法在編譯時(shí)一般按照{(diào)char *_t = text_a ;pr(_t) ;}的方式來實(shí)現(xiàn),壓縮可 以這樣進(jìn)行{char *_t = text_b ;pr (decode (_t)) ;},其中,text_b 是編譯器在編譯時(shí)將 text_a 用壓縮而成的,艮口 text_b = encode (text_a);上述刪除無意義的字符以及壓縮的目的,在于減少目標(biāo)代碼的長(zhǎng)度,以加快載入 速度以及減小帶寬占用。本發(fā)明所述的方法,其特征在于,web服務(wù)器將多個(gè)靜態(tài)或動(dòng)態(tài)頁面(或動(dòng)態(tài)頁面 編譯后的二進(jìn)制文件)打包在內(nèi)存中或某一個(gè)文件中的步驟。當(dāng)用戶請(qǐng)求打包的文件時(shí), web服務(wù)器可以快速的從包中取出,提高I/O效率。所述打包,可以壓縮,也可以不壓縮,其 中前者,對(duì)于機(jī)械存儲(chǔ)裝置具有比較顯著的意義。通過監(jiān)視打包前文件的狀態(tài)改變,維持打包文件與原始文件數(shù)據(jù)的一致性。本發(fā)明所述的方法,其特征在于,所述web頁面內(nèi)的c/c++代碼運(yùn)行所需要分配的 資源,由web服務(wù)器進(jìn)行管理并分配,c/c++代碼通過服務(wù)器代碼接口進(jìn)行調(diào)用。該方法主 要用于防止動(dòng)態(tài)頁面錯(cuò)誤時(shí),造成資源的泄露,如內(nèi)存,文件句柄(socket)等。本發(fā)明所述的方法,其特征在于,所述c/c++代碼使用標(biāo)準(zhǔn)的c/c++規(guī)范以及函數(shù) 庫。本發(fā)明所述的方法,其特征在于,所述web頁面內(nèi)的編程語言是c語言。一種web服務(wù)器,包括生成動(dòng)態(tài)頁面的步驟,即在web頁面中包含運(yùn)行于服務(wù)器 端的編程語言代碼,由服務(wù)器將所述web頁面內(nèi)容以及web頁面中包含的編程語言執(zhí)行結(jié) 果所形成的內(nèi)容一起發(fā)往客戶端,其特征在于,還包括一服務(wù)器調(diào)用接口,該接口用于所述 生成動(dòng)態(tài)頁面過程中,供所述web頁面中包含的編程語言代碼所調(diào)用,完成如下操作 從所述web服務(wù)器中請(qǐng)一臨時(shí)存儲(chǔ)區(qū)域,并返回一標(biāo)志(id);
所述編程語言代碼將以該id對(duì)臨時(shí)區(qū)域進(jìn)行訪問;所述臨時(shí)存儲(chǔ)區(qū)域?qū)⒃谄浔蛔詈笠淮卧L問或有效訪問后的某一時(shí)間周期后由服 務(wù)器自動(dòng)釋放;所述臨時(shí)存儲(chǔ)區(qū)域可以被多個(gè)/次動(dòng)態(tài)頁面的編程語言代碼以所述id所訪問;所述臨時(shí)存儲(chǔ)區(qū)域可由所述動(dòng)態(tài)頁面的編程語言代碼釋放(如用戶logout,不再 需要的時(shí)候),以節(jié)省資源,但不是強(qiáng)制或必須的。因?yàn)閣eb頁面的訪問永遠(yuǎn)是沒有預(yù)期的, 可能于任何時(shí)候中止。Web服務(wù)器負(fù)責(zé)所述臨時(shí)存儲(chǔ)區(qū)域的管理,在系統(tǒng)臨時(shí)存儲(chǔ)區(qū)域資源用盡的時(shí)候, 其將根據(jù)一定的管理策略釋放一些已被占用的臨時(shí)存儲(chǔ)區(qū)域,如最后使用或最少使用等。本發(fā)明所述的web服務(wù)器,其特征在于,所述臨時(shí)存儲(chǔ)區(qū)域位于內(nèi)存中或外存儲(chǔ) 器的由web服務(wù)器管理的某一特定文件中。該調(diào)用接口,主要用于多個(gè)相關(guān)聯(lián)的web頁面之間的安全數(shù)據(jù)共享,與php和jsp 中的session比較類似,不同的是,php中的session存儲(chǔ)在外存儲(chǔ)器中,而且是以多個(gè)文件 的形式,對(duì)系統(tǒng)性能的影響比較大,而本發(fā)明的一般存儲(chǔ)于內(nèi)存中,即使存儲(chǔ)于外村,也位 于同一個(gè)文件內(nèi),訪問速度遠(yuǎn)快于不同的文件。(可通過服務(wù)器參數(shù)配置大小和存儲(chǔ)方式)技術(shù)效果本發(fā)明的方法和系統(tǒng),在效率,安全、易用、性能上與現(xiàn)有的方法和系統(tǒng)相比,有以 下特點(diǎn)1.具有較高的編譯效率和執(zhí)行速度(c/c++是最接近機(jī)器語言的高級(jí)語言),同樣 環(huán)境下,其代碼的執(zhí)行速度,是Php和asp的數(shù)倍甚至數(shù)十倍;2.具有良好的可移植性(c/c++是最標(biāo)準(zhǔn)和規(guī)范的計(jì)算機(jī)語言),基本上,任何平 臺(tái)只要有編程語言,幾乎都有c/c++,以及它們的編譯器;3.具有最小的系統(tǒng)依賴性,其目標(biāo)代碼的運(yùn)行,除操作系統(tǒng)外,基本沒有任何要求4.具有最大的靈活性,其可以以任何接口,調(diào)用任何組件,其本身,也可以構(gòu)成任 何組件;5.最容易使用,c/c++是計(jì)算機(jī)領(lǐng)域的基礎(chǔ)語言,會(huì)的人最多,無需再去掌握各種 復(fù)雜的概念。6.具有很好的安全性(c/c++代碼編譯后是機(jī)器代碼)。7.具有最強(qiáng)的調(diào)試工具和開發(fā)環(huán)境,以及資料資源.8. 一般,服務(wù)器代碼都是由c/c++完成,所以,使用c/c++作為動(dòng)態(tài)web頁面的內(nèi) 嵌語言,與服務(wù)器有著天生契合。以上特點(diǎn),即構(gòu)成了本發(fā)明所述方法的技術(shù)效果。以發(fā)明人的實(shí)驗(yàn)(現(xiàn))為例 (Win32環(huán)境,Iinux下會(huì)更小),web服務(wù)器的代碼僅36k,專用編譯器(通過改造tiny c) 僅155K,以此為基礎(chǔ)的簡(jiǎn)單blog系統(tǒng)示例(不計(jì)UI設(shè)計(jì)時(shí)間,編碼/調(diào)試2-3天),包括 登錄/發(fā)表/修改/瀏覽/上傳等6個(gè)頁面,總代碼不到100k (源代碼不到50k),這還是在 未進(jìn)行任何壓縮的情況下。而該實(shí)驗(yàn)blog以及web服務(wù)器,即使在15-20年前的機(jī)器上, 也能很好的運(yùn)行。本實(shí)驗(yàn)(現(xiàn))使用c完成(同時(shí)也支持c++編譯器的編譯)。


圖1為本發(fā)明的所述方法的流程框圖;圖2為本發(fā)明的所述方法編譯包含c/c++代碼的web頁面生成中間C語言臨時(shí)文 件的流程框圖,其中1030是對(duì)103的例子說明,1080是對(duì)108和107的例子說明,200-205 是對(duì)104過程的說明圖3為本發(fā)明的所述方法直接編譯包含c/c++代碼的web頁面的流程框圖,其中 1002可延遲至需要寫入時(shí)才打開。圖中,10030是對(duì)1003的示例,10080是對(duì)1008和1007 的示例下面,結(jié)合附圖和實(shí)施例進(jìn)一步說明。 具體實(shí)施例本發(fā)明所述的方法和系統(tǒng)可以這樣實(shí)施1.定義編程語言標(biāo)記標(biāo)識(shí),開始標(biāo)記結(jié)束標(biāo)記%>全局函數(shù)/變量開始標(biāo)記 < 0Z0 static全局函數(shù)/變量開始標(biāo)記 % >(與asp碰巧相同,正好便于web編輯器編輯,該標(biāo)記可任意更改/設(shè)定,只需動(dòng)態(tài) 頁面和編譯器一致即可)2.定義web服務(wù)器與動(dòng)態(tài)頁面生成調(diào)用函數(shù)接口,本實(shí)施例定義為int HttpMain (pHTTPREQ pHttpReq),該函數(shù)由web服務(wù)器動(dòng)態(tài)調(diào)用返回為1表示 成功,0表示失敗其中,pHttpReq為一組與web服務(wù)器輸入輸出及管理有關(guān)的函數(shù)調(diào)用指針,如pHttpReq- > HttpGetCookieStr (char *name, int *cLen) ;cookie 串{tpHttpReq- > Httpffrite (void *buff, int wLen);往客戶端寫內(nèi)容pHttpReq-> HttpGetEnvStr (char *name,, int vLen);獲得環(huán)境變量.....并以此實(shí)現(xiàn)服務(wù)器及調(diào)用接口,主要步驟如下2. 1偵聽80端口,有用戶請(qǐng)求進(jìn)入則轉(zhuǎn)2. 22. 2讀取用戶http請(qǐng)求頭,判斷是否用戶請(qǐng)求的是動(dòng)態(tài)頁面,如果不是,直接讀取 靜態(tài)文件,發(fā)送給用戶,然后轉(zhuǎn)2. 1 ;1. 3請(qǐng)求動(dòng)態(tài)頁面的二進(jìn)制目標(biāo)代碼存在且新于其文本文件嗎?若是,則轉(zhuǎn)2. 51.4編譯動(dòng)態(tài)頁面為二進(jìn)制目標(biāo)代碼,不成功,報(bào)錯(cuò),返回2. 1(具體方法后述)1. 5設(shè)置相應(yīng)http環(huán)境變量,如cookie,以及pHttpReq調(diào)用函數(shù)1. 6裝載動(dòng)態(tài)頁面編譯后的二進(jìn)制目標(biāo)代碼,并調(diào)用HttpMain函數(shù)1.7如果函數(shù)調(diào)用成功,直接返回2. 1,否則,(釋放該頁面申請(qǐng)而未釋放的資源), 報(bào)錯(cuò)后返回2. 13.實(shí)現(xiàn)一轉(zhuǎn)換程序,將嵌入c/c++代碼的html頁面文件a. htc,轉(zhuǎn)換為純粹的c/ C++代碼文件b. C (或b. cpp),如圖2所示,包括如下步驟
3.1.將a. htc文件讀入內(nèi)存,并創(chuàng)建文件b. c ;
3.2.寫入 #include<stdio.h> 到文件 b. c
3.3.寫入 #include<http. h> 到文件 b. c, http. h 中定義了 pHTTPREQ
3.4.掃描內(nèi)存中的文件a.htc,尋找static,找到后記錄位置為pa,未找到,則轉(zhuǎn)3.9
3.5.從位置pa開始,掃描%>,找到后記錄位置為Pb,未找到,出錯(cuò),退出
3.6.將位置pa和pb之間的c/c++代碼寫入文件b. c中
3.7.將pa和pb之間的內(nèi)容(包括開始和結(jié)束標(biāo)志)刪除;
3.8.重復(fù)3. 4-3. 7的步驟;
3.9.寫入 int HttpMain (pHTTPREQ pHttpReq) {到文件 b. c
3.10.設(shè)置pa位置為內(nèi)存中的文件a. htc的開始;
3.11.從Pa位置開始掃描內(nèi)存中的文件a. htc,尋找< %,找到后記錄位置為pb,未找到,則轉(zhuǎn)3. 16
3.12.將pa和pb之間的html內(nèi)容以如下方式寫入文件b. c {char*_t = ” ... ”,pr (_t);},其中,...為html中相應(yīng)部分,pr為系統(tǒng)定義的輸出函數(shù)*
3.13.尋找%>,找到后記錄位置為pc,未找到,出錯(cuò),退出
3.14.將pb和pc之間的c/c++代碼寫入文件b. c中
3.15.令pa = pc,重復(fù)3. 11-3. 14的步驟
3.16.將pa到內(nèi)存中的文件a.htc結(jié)束的html內(nèi)容以如下方式寫入文件b. c{char*_t=”...”,pr(_t) ;},其中,...為html中相應(yīng)部分,pr為系統(tǒng)定義的輸出函數(shù)*
3.17.將return 1 ;}寫入文件b. c
3.18.關(guān)閉文件b. c,轉(zhuǎn)換結(jié)束
* 如#define pr (a) pHttpReq- > Http Write(a, strlen (a))
4.編譯b. c,本實(shí)施例使用tiny c編譯器,即tcc-shared b. c_o a. dll,則產(chǎn)生
a. dll(linux下為a. so,共享對(duì)象)如果編譯正確,則刪除中間文件b. C,否則,對(duì)照b. c查找錯(cuò)誤上述轉(zhuǎn)換程序和tcc可以通過服務(wù)器直接調(diào)用,通過以上方法,我們對(duì)本發(fā)明做了簡(jiǎn)單的原理性實(shí)現(xiàn),我們可以通過以下的改進(jìn), 進(jìn)一步完善上述實(shí)施例 將服務(wù)器改為多線程,即將2. 2-2. 7的步驟,開辟一個(gè)線程進(jìn)行; 將3中的轉(zhuǎn)換程序與tcc結(jié)合為一體,使tcc可以直接編譯包含c/c++代碼的 html文件,如上述的a. htc,即tcc自動(dòng)判斷輸入文件的類型,當(dāng)判定是.htc類型時(shí),自動(dòng) 生成中間文件,并將中間文件編譯為a. dll,然后刪除中間文件 進(jìn)一步,我們可以將tcc編譯器做進(jìn)一步的改進(jìn),不產(chǎn)生中間文件,即直接按上 述步驟3中的邏輯,將htc文件中的各部分編譯成對(duì)應(yīng)的代碼,并連接成最終的dll (或so) 文件,如圖3所示。直接編譯的好處,在于速度更快,而且,一旦出錯(cuò),可以更好的發(fā)現(xiàn)出錯(cuò) 的地方。 再進(jìn)一步,我們可以將tcc直接加入到web服務(wù)器代碼中去當(dāng)然,上述實(shí)現(xiàn)也可以應(yīng)用在現(xiàn)有的web服務(wù)器上,如Apache和IIS,具體如下
編寫一個(gè)使用ISAPI接口的htc頁面請(qǐng)求處理模塊,在該模塊中完成上述步驟 2. 3-2. 7的過程,這樣,可以很容易的將本發(fā)明實(shí)現(xiàn)到現(xiàn)有的大部分web服務(wù)器上。如果不使用動(dòng)態(tài)連接庫(或共享對(duì)象),而使用傳統(tǒng)的main()函數(shù)調(diào)用,可以以 CGI方式的接口進(jìn)行,但效率和功能將受限。CGI接口是很成熟的方式,本發(fā)明不做過多敘 述。本發(fā)明所述的web服務(wù)器,臨時(shí)存儲(chǔ)區(qū)域可以這樣來實(shí)現(xiàn),其接口可以對(duì)現(xiàn)有的 web服務(wù)器的接口進(jìn)行增加,如對(duì)于本發(fā)明的支持動(dòng)態(tài)頁面的web服務(wù)器(http服務(wù)器)而 言,只需在pHttpReq指針結(jié)構(gòu)中多定義幾個(gè)函數(shù)指針即可,而對(duì)于IIS或Apache類的web 服務(wù)器,則可以通過對(duì)其都支持的ISAPI接口進(jìn)行擴(kuò)充,以增加接口調(diào)用。web服務(wù)器內(nèi)可以這樣來實(shí)現(xiàn),定義每個(gè)臨時(shí)存儲(chǔ)區(qū)域的大小為64字節(jié),則 1000000萬用戶,需要64M內(nèi)存的存儲(chǔ)空間,這對(duì)目前的服務(wù)器內(nèi)存而言,屬于比較小的開 銷。typedef struct_tagtempMem{UINT32 rand ;//服務(wù)器產(chǎn)生的隨機(jī)數(shù)。供安全驗(yàn)證之用time_t last_access_t //最有訪問時(shí)間/有效訪問時(shí)間Strcut *_tagtempMem pNext, pPrev ; //雙向鏈表char username[16] ; //用戶名char userdata[32] ; //用戶數(shù)據(jù);} TEMPMEM,*pTEMPMEM ;TEMPMEM tmpMem[ 1000000];這1百萬個(gè)臨時(shí)存儲(chǔ)空間以兩個(gè)雙向鏈表進(jìn)行組織,一個(gè)是已經(jīng)使用的 pUsedHead/pUsedTail,一個(gè)是尚未使用的pEmpty(Web服務(wù)器啟動(dòng)時(shí)完成),對(duì)于釋放的臨 時(shí)存儲(chǔ)空間,可以直接加到PEmpty的鏈頭,而對(duì)于每次使用/訪問的鏈表,則自動(dòng)將之由當(dāng) 前的位置,移動(dòng)至pUsedHead,這樣,pUsedTail則總是最久未使用的臨時(shí)存儲(chǔ)空間,需要釋 放的時(shí)候,即從尾部釋放即可。本實(shí)施例設(shè)定過期的時(shí)間為20分鐘,即20分鐘該臨時(shí)存儲(chǔ)空間沒被訪問,其可能 在系統(tǒng)臨時(shí)存儲(chǔ)空間不夠分配的時(shí)候被釋放。本實(shí)施例所需的函數(shù)定義如下UINT StartTempMem(char *username);對(duì)用戶 username分配一臨時(shí)存儲(chǔ)空間,返 回ID本例中,返回的ID等于該臨時(shí)存儲(chǔ)空間的下標(biāo)號(hào),或該下表號(hào)加上一固定的數(shù) 字,當(dāng)然,返回的ID也可以是指向該臨時(shí)存儲(chǔ)空間的內(nèi)存地址。int ISiTempMem(UINT id, char *username);所述 id 對(duì)應(yīng)的臨時(shí)存儲(chǔ)空間還有效 嘛?如果有效,則更新iast_access_t數(shù)據(jù),返回1,否者,返回0 ;char *GetTempMemStr(UINT id, int index);獲得臨時(shí)存儲(chǔ)空間字符串?dāng)?shù)據(jù),如 username/userdata ^ ;int SetTempMemData (UINT id, int index, void *data, int datasize);存儲(chǔ)臨 時(shí)存儲(chǔ)空間數(shù)據(jù)
UINT GetTempMemInt (UINT id, int index);獲得臨時(shí)存儲(chǔ)空間整數(shù)數(shù)據(jù),如rand 數(shù)據(jù),userdata空間大小等Int EndTempMem(UINT id, char *username);釋放臨時(shí)存儲(chǔ)空間;通過上述方式,可實(shí)現(xiàn)本發(fā)明所述的web服務(wù)器。由于c比c++具有更廣的使用范圍,也具有更好的效率和更簡(jiǎn)單的語法,因而本發(fā) 明更建議使用c語言作為動(dòng)態(tài)頁面的嵌入編程語言。本發(fā)明中暫以.htc后綴表示包含c/c++代碼的web頁面文件,以.htd后綴表示 包含c/c++代碼的web頁面被編譯后文件。本發(fā)明中c/c++的含義為c或C++。
權(quán)利要求
1.一種服務(wù)器端動(dòng)態(tài)網(wǎng)頁生成的方法,包括在web頁面中包含運(yùn)行于服務(wù)器端的編 程語言代碼,由服務(wù)器將所述web頁面內(nèi)容以及web頁面中包含的編程語言執(zhí)行結(jié)果所形 成的內(nèi)容一起發(fā)往客戶端,其特征在于所述編程語言是c語言或c++語言;所述編程語言代碼以編譯后的機(jī)器代碼形式運(yùn)行。
2.按照權(quán)利要求1所述的方法,其特征在于,所述c/c++代碼在第一次運(yùn)行時(shí)被編譯。
3.按照權(quán)利要求1所述的方法,其特征在于,還包括將包含c/c++代碼的web頁面,轉(zhuǎn) 換為一中間c/c++代碼,通過現(xiàn)有的專用或通用c/c++編譯器對(duì)中間代碼進(jìn)行編譯。
4.按照權(quán)利要求1所述的方法,其特征在于,使用專用的編譯器,直接編譯所述包含c/ c++代碼的web頁面。
5.按照權(quán)利要求1所述的方法,其特征在于,所述編譯器代碼內(nèi)置于與web服務(wù)器代碼 內(nèi),或作為web服務(wù)器代碼的一個(gè)模塊。
6.按照權(quán)利要求1所述的方法,其特征在于,所述動(dòng)態(tài)頁面被編譯后的機(jī)器代碼以動(dòng) 態(tài)連接庫或共享對(duì)象的方式為web服務(wù)器所動(dòng)態(tài)裝入并調(diào)用。
7.按照權(quán)利要求1所述的方法,其特征在于,還包括使用另一編程語言標(biāo)記來標(biāo)記全 局函數(shù)或變量,該標(biāo)記內(nèi)的代碼在編譯時(shí),自動(dòng)被抽出并放置在當(dāng)前函數(shù)的前面或外面。
8.按照權(quán)利要求1所述的方法,其特征在于,所述web頁面內(nèi)的c/c++代碼運(yùn)行所需要 分配的資源,由web服務(wù)器進(jìn)行管理并分配。
9.一種web服務(wù)器,包括生成動(dòng)態(tài)頁面的步驟,即在web頁面中包含運(yùn)行于服務(wù)器端 的編程語言代碼,由服務(wù)器將所述web頁面內(nèi)容以及web頁面中包含的編程語言執(zhí)行結(jié)果 所形成的內(nèi)容一起發(fā)往客戶端,其特征在于,還包括一服務(wù)器調(diào)用接口,該接口用于所述生 成動(dòng)態(tài)頁面過程中,供所述web頁面中包含的編程語言代碼所調(diào)用,完成如下操作 從所述web服務(wù)器中請(qǐng)一臨時(shí)存儲(chǔ)區(qū)域,并返回一標(biāo)志(id); 所述編程語言代碼將以該id對(duì)臨時(shí)區(qū)域進(jìn)行訪問;所述臨時(shí)存儲(chǔ)區(qū)域在其被最后一次訪問或有效訪問后的某一時(shí)間周期后由服務(wù)器自 動(dòng)釋放;所述臨時(shí)存儲(chǔ)區(qū)域可以被多個(gè)/次動(dòng)態(tài)頁面的編程語言代碼以所述id進(jìn)行訪問;所述臨時(shí)存儲(chǔ)區(qū)域可由所述動(dòng)態(tài)頁面的編程語言代碼釋放,但不是強(qiáng)制或必須的。
10.如權(quán)利要求9所述的web服務(wù)器,其特征在于,所述臨時(shí)存儲(chǔ)區(qū)域位于內(nèi)存中。
全文摘要
用于web服務(wù)器的方法和系統(tǒng),該方法和系統(tǒng)用于更好的控制web服務(wù)器的性能與效率,包括一種動(dòng)態(tài)網(wǎng)頁生成方法,即使用c或c++代碼作為嵌入web頁面的編程語言,所述c/c++代碼在服務(wù)器端被編譯成二進(jìn)制機(jī)器代碼直接在cpu處運(yùn)行,所述c/c++代碼在第一次運(yùn)行時(shí)被編譯,同時(shí)提供了編譯所述動(dòng)態(tài)頁面所需的方法以及提高基于動(dòng)態(tài)頁面的服務(wù)器的優(yōu)化方法,包擴(kuò)在服務(wù)器內(nèi)設(shè)置臨時(shí)存儲(chǔ)空間,對(duì)靜態(tài)頁面或動(dòng)態(tài)頁面打包等。
文檔編號(hào)G06F17/30GK102141991SQ20101010368
公開日2011年8月3日 申請(qǐng)日期2010年2月2日 優(yōu)先權(quán)日2010年2月2日
發(fā)明者鐘巨航 申請(qǐng)人:鐘巨航
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
宜阳县| 蒙自县| 奉新县| 娄底市| 汽车| 岗巴县| 和平区| 林口县| 绩溪县| 利津县| 南通市| 马鞍山市| 龙南县| 普兰县| 尖扎县| 江门市| 武夷山市| 枞阳县| 常山县| 崇明县| 佛学| 昭通市| 蓬安县| 修水县| 突泉县| 清河县| 阳朔县| 南昌县| 苏尼特右旗| 皮山县| 唐河县| 凌海市| 玉树县| 崇仁县| 平山县| 河源市| 舒兰市| 那坡县| 彰化县| 闽清县| 兰溪市|