欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

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

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


圖1為本發(fā)明的所述方法的流程框圖;圖2為本發(fā)明的所述方法編譯包含c/c++代碼的web頁面生成中間C語言臨時文 件的流程框圖,其中1030是對103的例子說明,1080是對108和107的例子說明,200-205 是對104過程的說明圖3為本發(fā)明的所述方法直接編譯包含c/c++代碼的web頁面的流程框圖,其中 1002可延遲至需要寫入時才打開。圖中,10030是對1003的示例,10080是對1008和1007 的示例下面,結(jié)合附圖和實施例進(jìn)一步說明。 具體實施例本發(fā)明所述的方法和系統(tǒng)可以這樣實施1.定義編程語言標(biāo)記標(biāo)識,開始標(biāo)記結(jié)束標(biāo)記%>全局函數(shù)/變量開始標(biāo)記 < 0Z0 static全局函數(shù)/變量開始標(biāo)記 % >(與asp碰巧相同,正好便于web編輯器編輯,該標(biāo)記可任意更改/設(shè)定,只需動態(tài) 頁面和編譯器一致即可)2.定義web服務(wù)器與動態(tài)頁面生成調(diào)用函數(shù)接口,本實施例定義為int HttpMain (pHTTPREQ pHttpReq),該函數(shù)由web服務(wù)器動態(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)境變量.....并以此實現(xiàn)服務(wù)器及調(diào)用接口,主要步驟如下2. 1偵聽80端口,有用戶請求進(jìn)入則轉(zhuǎn)2. 22. 2讀取用戶http請求頭,判斷是否用戶請求的是動態(tài)頁面,如果不是,直接讀取 靜態(tài)文件,發(fā)送給用戶,然后轉(zhuǎn)2. 1 ;1. 3請求動態(tài)頁面的二進(jìn)制目標(biāo)代碼存在且新于其文本文件嗎?若是,則轉(zhuǎn)2. 51.4編譯動態(tài)頁面為二進(jìn)制目標(biāo)代碼,不成功,報錯,返回2. 1(具體方法后述)1. 5設(shè)置相應(yīng)http環(huán)境變量,如cookie,以及pHttpReq調(diào)用函數(shù)1. 6裝載動態(tài)頁面編譯后的二進(jìn)制目標(biāo)代碼,并調(diào)用HttpMain函數(shù)1.7如果函數(shù)調(diào)用成功,直接返回2. 1,否則,(釋放該頁面申請而未釋放的資源), 報錯后返回2. 13.實現(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,未找到,出錯,退出
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,未找到,出錯,退出
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,本實施例使用tiny c編譯器,即tcc-shared b. c_o a. dll,則產(chǎn)生
a. dll(linux下為a. so,共享對象)如果編譯正確,則刪除中間文件b. C,否則,對照b. c查找錯誤上述轉(zhuǎn)換程序和tcc可以通過服務(wù)器直接調(diào)用,通過以上方法,我們對本發(fā)明做了簡單的原理性實現(xiàn),我們可以通過以下的改進(jìn), 進(jìn)一步完善上述實施例 將服務(wù)器改為多線程,即將2. 2-2. 7的步驟,開辟一個線程進(jìn)行; 將3中的轉(zhuǎn)換程序與tcc結(jié)合為一體,使tcc可以直接編譯包含c/c++代碼的 html文件,如上述的a. htc,即tcc自動判斷輸入文件的類型,當(dāng)判定是.htc類型時,自動 生成中間文件,并將中間文件編譯為a. dll,然后刪除中間文件 進(jìn)一步,我們可以將tcc編譯器做進(jìn)一步的改進(jìn),不產(chǎn)生中間文件,即直接按上 述步驟3中的邏輯,將htc文件中的各部分編譯成對應(yīng)的代碼,并連接成最終的dll (或so) 文件,如圖3所示。直接編譯的好處,在于速度更快,而且,一旦出錯,可以更好的發(fā)現(xiàn)出錯 的地方。 再進(jìn)一步,我們可以將tcc直接加入到web服務(wù)器代碼中去當(dāng)然,上述實現(xiàn)也可以應(yīng)用在現(xiàn)有的web服務(wù)器上,如Apache和IIS,具體如下
編寫一個使用ISAPI接口的htc頁面請求處理模塊,在該模塊中完成上述步驟 2. 3-2. 7的過程,這樣,可以很容易的將本發(fā)明實現(xiàn)到現(xiàn)有的大部分web服務(wù)器上。如果不使用動態(tài)連接庫(或共享對象),而使用傳統(tǒng)的main()函數(shù)調(diào)用,可以以 CGI方式的接口進(jìn)行,但效率和功能將受限。CGI接口是很成熟的方式,本發(fā)明不做過多敘 述。本發(fā)明所述的web服務(wù)器,臨時存儲區(qū)域可以這樣來實現(xiàn),其接口可以對現(xiàn)有的 web服務(wù)器的接口進(jìn)行增加,如對于本發(fā)明的支持動態(tài)頁面的web服務(wù)器(http服務(wù)器)而 言,只需在pHttpReq指針結(jié)構(gòu)中多定義幾個函數(shù)指針即可,而對于IIS或Apache類的web 服務(wù)器,則可以通過對其都支持的ISAPI接口進(jìn)行擴充,以增加接口調(diào)用。web服務(wù)器內(nèi)可以這樣來實現(xiàn),定義每個臨時存儲區(qū)域的大小為64字節(jié),則 1000000萬用戶,需要64M內(nèi)存的存儲空間,這對目前的服務(wù)器內(nèi)存而言,屬于比較小的開 銷。typedef struct_tagtempMem{UINT32 rand ;//服務(wù)器產(chǎn)生的隨機數(shù)。供安全驗證之用time_t last_access_t //最有訪問時間/有效訪問時間Strcut *_tagtempMem pNext, pPrev ; //雙向鏈表char username[16] ; //用戶名char userdata[32] ; //用戶數(shù)據(jù);} TEMPMEM,*pTEMPMEM ;TEMPMEM tmpMem[ 1000000];這1百萬個臨時存儲空間以兩個雙向鏈表進(jìn)行組織,一個是已經(jīng)使用的 pUsedHead/pUsedTail,一個是尚未使用的pEmpty(Web服務(wù)器啟動時完成),對于釋放的臨 時存儲空間,可以直接加到PEmpty的鏈頭,而對于每次使用/訪問的鏈表,則自動將之由當(dāng) 前的位置,移動至pUsedHead,這樣,pUsedTail則總是最久未使用的臨時存儲空間,需要釋 放的時候,即從尾部釋放即可。本實施例設(shè)定過期的時間為20分鐘,即20分鐘該臨時存儲空間沒被訪問,其可能 在系統(tǒng)臨時存儲空間不夠分配的時候被釋放。本實施例所需的函數(shù)定義如下UINT StartTempMem(char *username);對用戶 username分配一臨時存儲空間,返 回ID本例中,返回的ID等于該臨時存儲空間的下標(biāo)號,或該下表號加上一固定的數(shù) 字,當(dāng)然,返回的ID也可以是指向該臨時存儲空間的內(nèi)存地址。int ISiTempMem(UINT id, char *username);所述 id 對應(yīng)的臨時存儲空間還有效 嘛?如果有效,則更新iast_access_t數(shù)據(jù),返回1,否者,返回0 ;char *GetTempMemStr(UINT id, int index);獲得臨時存儲空間字符串?dāng)?shù)據(jù),如 username/userdata ^ ;int SetTempMemData (UINT id, int index, void *data, int datasize);存儲臨 時存儲空間數(shù)據(jù)
UINT GetTempMemInt (UINT id, int index);獲得臨時存儲空間整數(shù)數(shù)據(jù),如rand 數(shù)據(jù),userdata空間大小等Int EndTempMem(UINT id, char *username);釋放臨時存儲空間;通過上述方式,可實現(xiàn)本發(fā)明所述的web服務(wù)器。由于c比c++具有更廣的使用范圍,也具有更好的效率和更簡單的語法,因而本發(fā) 明更建議使用c語言作為動態(tài)頁面的嵌入編程語言。本發(fā)明中暫以.htc后綴表示包含c/c++代碼的web頁面文件,以.htd后綴表示 包含c/c++代碼的web頁面被編譯后文件。本發(fā)明中c/c++的含義為c或C++。
權(quán)利要求
1.一種服務(wù)器端動態(tài)網(wǎng)頁生成的方法,包括在web頁面中包含運行于服務(wù)器端的編 程語言代碼,由服務(wù)器將所述web頁面內(nèi)容以及web頁面中包含的編程語言執(zhí)行結(jié)果所形 成的內(nèi)容一起發(fā)往客戶端,其特征在于所述編程語言是c語言或c++語言;所述編程語言代碼以編譯后的機器代碼形式運行。
2.按照權(quán)利要求1所述的方法,其特征在于,所述c/c++代碼在第一次運行時被編譯。
3.按照權(quán)利要求1所述的方法,其特征在于,還包括將包含c/c++代碼的web頁面,轉(zhuǎn) 換為一中間c/c++代碼,通過現(xiàn)有的專用或通用c/c++編譯器對中間代碼進(jìn)行編譯。
4.按照權(quán)利要求1所述的方法,其特征在于,使用專用的編譯器,直接編譯所述包含c/ c++代碼的web頁面。
5.按照權(quán)利要求1所述的方法,其特征在于,所述編譯器代碼內(nèi)置于與web服務(wù)器代碼 內(nèi),或作為web服務(wù)器代碼的一個模塊。
6.按照權(quán)利要求1所述的方法,其特征在于,所述動態(tài)頁面被編譯后的機器代碼以動 態(tài)連接庫或共享對象的方式為web服務(wù)器所動態(tài)裝入并調(diào)用。
7.按照權(quán)利要求1所述的方法,其特征在于,還包括使用另一編程語言標(biāo)記來標(biāo)記全 局函數(shù)或變量,該標(biāo)記內(nèi)的代碼在編譯時,自動被抽出并放置在當(dāng)前函數(shù)的前面或外面。
8.按照權(quán)利要求1所述的方法,其特征在于,所述web頁面內(nèi)的c/c++代碼運行所需要 分配的資源,由web服務(wù)器進(jìn)行管理并分配。
9.一種web服務(wù)器,包括生成動態(tài)頁面的步驟,即在web頁面中包含運行于服務(wù)器端 的編程語言代碼,由服務(wù)器將所述web頁面內(nèi)容以及web頁面中包含的編程語言執(zhí)行結(jié)果 所形成的內(nèi)容一起發(fā)往客戶端,其特征在于,還包括一服務(wù)器調(diào)用接口,該接口用于所述生 成動態(tài)頁面過程中,供所述web頁面中包含的編程語言代碼所調(diào)用,完成如下操作 從所述web服務(wù)器中請一臨時存儲區(qū)域,并返回一標(biāo)志(id); 所述編程語言代碼將以該id對臨時區(qū)域進(jìn)行訪問;所述臨時存儲區(qū)域在其被最后一次訪問或有效訪問后的某一時間周期后由服務(wù)器自 動釋放;所述臨時存儲區(qū)域可以被多個/次動態(tài)頁面的編程語言代碼以所述id進(jìn)行訪問;所述臨時存儲區(qū)域可由所述動態(tài)頁面的編程語言代碼釋放,但不是強制或必須的。
10.如權(quán)利要求9所述的web服務(wù)器,其特征在于,所述臨時存儲區(qū)域位于內(nèi)存中。
全文摘要
用于web服務(wù)器的方法和系統(tǒng),該方法和系統(tǒng)用于更好的控制web服務(wù)器的性能與效率,包括一種動態(tài)網(wǎng)頁生成方法,即使用c或c++代碼作為嵌入web頁面的編程語言,所述c/c++代碼在服務(wù)器端被編譯成二進(jìn)制機器代碼直接在cpu處運行,所述c/c++代碼在第一次運行時被編譯,同時提供了編譯所述動態(tài)頁面所需的方法以及提高基于動態(tài)頁面的服務(wù)器的優(yōu)化方法,包擴在服務(wù)器內(nèi)設(shè)置臨時存儲空間,對靜態(tài)頁面或動態(tài)頁面打包等。
文檔編號G06F17/30GK102141991SQ20101010368
公開日2011年8月3日 申請日期2010年2月2日 優(yōu)先權(quán)日2010年2月2日
發(fā)明者鐘巨航 申請人:鐘巨航
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
木里| 电白县| 宾阳县| 宝山区| 剑河县| 庆元县| 介休市| 延寿县| 武胜县| 商河县| 资中县| 阜南县| 桂平市| 竹溪县| 双峰县| 中方县| 碌曲县| 株洲市| 亚东县| 龙陵县| 河间市| 泊头市| 济南市| 乌鲁木齐市| 昌平区| 桓仁| 安宁市| 松桃| 万山特区| 祥云县| 新余市| 南部县| 调兵山市| 喜德县| 大悟县| 剑河县| 荥经县| 陆河县| 闽清县| 定日县| 金昌市|