專利名稱::一種改善Web服務器通信服務穩(wěn)定性的方法
技術領域:
:本發(fā)明涉及通信
技術領域:
,具體涉及一種改善Web服務器通信服務穩(wěn)定性的方法。
背景技術:
:Web服務器也稱為WWW(WORLDWIDEWEB)服務器,主要功能是提供網(wǎng)上信息瀏覽服務。WWW是Internet的多媒體信息查詢工具,是Internet上近年才發(fā)展起來的服務,也是發(fā)展最快和目前用的最廣泛的服務。正是因為有了WWW工具,才使得近年來Internet迅速發(fā)展,且用戶數(shù)量飛速增長。WWW是WorldWideWeb(環(huán)球信息網(wǎng))的縮寫,也可以簡稱為Web,中文名字為"萬維網(wǎng)"。通過萬維網(wǎng),人們只要通過使用簡單的方法,就可以很迅速方便地取得豐富的信息資料。由于用戶在通過Web瀏覽器訪問信息資源的過程中,無需再關心一些技術性的細節(jié),而且界面非常友好,因而Web在Internet上一推出就受到了熱烈的歡迎,走紅全球,并迅速得到了爆炸性的發(fā)展。如圖1所示,Web服務器可以解析(handles)HTTP協(xié)議。當Web服務器接收到一個HTTP請求(request),會返回一個HTTP響應(response),例如送回一個HTML頁面。為了處理一個請求(request),Web服務器可以響應(response)—個靜態(tài)頁面或圖片,進行頁面跳轉(redirect),或者把動態(tài)響應(dynamicresponse)的產(chǎn)生委托(delegate)給一些其它的程序。無論它們的目的如何,這些服務器端(server-side)的程序通常產(chǎn)生一個HTML的響應(response)來讓瀏覽器可以瀏覽。使用最多的webserver服務器軟件有兩個微軟的信息服務器(IIS),和Apache。Microsoft的Web服務器產(chǎn)品為InternetInformationServer(IIS),IIS是允許在公共Intranet或Internet上發(fā)布信息的Web服務器。IIS是目前最流行的Web服務器產(chǎn)品之一,很多著名的網(wǎng)站都是建立在IIS的平臺上。IIS是一種Web服務組件,其中包括Web服務器、FTP服務器、NNTP服務器和SMTP服務器,分別用于網(wǎng)頁瀏覽、文件傳輸、新聞服務和郵件發(fā)送等方面,它使得在網(wǎng)絡(包括互聯(lián)網(wǎng)和局域網(wǎng))上發(fā)布信息成了一件很容易的事。它提供ISAPI(IntranetServerAPI)作為擴展Web服務器功能的編程接口。如圖2所示,互聯(lián)網(wǎng)服務應用程序編程接口(InternetServerA卯licationProgrammingInterface,簡稱ISAPI)是一組API函數(shù)。它是一種用來開發(fā)擴展IIS程序的強有力的方法。使用該方法可以開發(fā)基于Web的醫(yī)學影像顯示接口層,通過該接口層Web瀏覽器就可以訪問到集群存儲服務器上的影像數(shù)據(jù)。如圖3所示,醫(yī)學影像顯示接口層具體的任務處理操作流程首先Web瀏覽器通過標準HTTP協(xié)議向Web服務器發(fā)出取圖請求。Web服務器接收到求請后,通過TCP/IP協(xié)議向影像存儲服務器發(fā)出連接請求,收到影像存儲服務器的連接確認后讀取影像數(shù)據(jù),數(shù)據(jù)讀取成功斷開連接。圖像獲取成功后,Web服務器應該根據(jù)瀏覽器傳過來的參數(shù)進行相應的處理,如調整圖像大小,數(shù)據(jù)壓縮,文件格式轉換等。圖像處理完畢后將結果返回給Web瀏明如圖4所示,ISAPI擴展任務程序以DLL形式被Web服務加載到自己的進程空間,因此和Web服務共用一個地址空間,且在沒有客戶請求時可以將其從內存中卸載;當接收到多個客戶請求時使用多線程實現(xiàn)任務處理方案,由線程調用ISAPI擴展任務程序,因為ISAPI擴展任務和調用它的進程(IIS)在同一進程地址空間中,這樣它們就可以互相直接聯(lián)系。這種方式一個最大的隱患就是會導致整個IIS當機,有些時候會時整個Web服務器癱瘓。
發(fā)明內容本發(fā)明要解決的技術問題是提供一種改善Web服務器通信服務穩(wěn)定性的方法,克服現(xiàn)有技術Web服務器通信服務單純采用多線程的ISAPI擴展任務與每個客戶端進行通信,容易導致通信服務不穩(wěn)定的缺陷。本發(fā)明為解決上述技術問題所采用的技術方案為—種改善Web服務器通信服務穩(wěn)定性的方法,包括步驟Al、在Web服務器上建立Web服務主進程;A2、所述Web服務主進程將ISAPI擴展任務程序加載到內存中;A3、在所述Web服務器與客戶端進行通信時,所述Web服務主進程啟動相應的線程執(zhí)行所述ISAPI擴展任務程序,并同時啟動相應的進程完成所述線程要求的處理任務,所述Web服務主進程開辟所述線程和所述進程之間進行通信的共享內存區(qū)。所述的改善Web服務器通信服務穩(wěn)定性的方法,其中所述步驟A3包括步驟建立管理進程,由所述管理進程為所述線程和所述進程在所述共享內存區(qū)內分配內存資源。所述的改善Web服務器通信服務穩(wěn)定性的方法,其中所述步驟A3包括步驟所述Web通信服務主進程在所述共享內存區(qū)內設置進程狀態(tài)表,所述進程狀態(tài)表用于標記線程和進程的狀態(tài)。所述的改善Web服務器通信服務穩(wěn)定性的方法,其中所述步驟A3包括步驟所述Web服務主進程在所述共享內存區(qū)內設置進程消息表,所述進程消息表用于存儲進程間進行通信的消息內容。所述的改善Web服務器通信服務穩(wěn)定性的方法,其中所述步驟A3包括步驟所述Web服務主進程在所述共享內存區(qū)內設置子進程屬性信息結構,所述子進程屬性信息結構用于標記所述進程的相關信息。所述的改善Web服務器通信服務穩(wěn)定性的方法,其中所述步驟A3包括步驟所述Web服務主進程在所述共享內存區(qū)內設置進程選擇屬性信息結構,所述進程選擇屬性信息結構用于標記所述進程與其它進程的關系信息。所述的改善Web服務器通信服務穩(wěn)定性的方法,其中所述步驟A3包括步驟所述Web服務主進程在所述共享內存區(qū)內設置管理進程屬性信息結構,所述管理進程屬性信息結構用于記錄所述管理進程的管理信息。所述的改善Web服務器通信服務穩(wěn)定性的方法,其中所述步驟A3包括步驟所述線程將ISAPI擴展任務數(shù)據(jù)拷入到所述共享內存區(qū)內的數(shù)據(jù)交換區(qū),然后等待處理結果。所述的改善Web服務器通信服務穩(wěn)定性的方法,其中為所述進程設置生存期,超過生存期的所述進程將結束運行。所述的改善Web服務器通信服務穩(wěn)定性的方法,其中所述Web服務主進程設置初始默認啟動子進程數(shù),如果處于生存狀態(tài)的所述進程數(shù)量小于所述初始默認啟動子進程數(shù),所述Web服務主進程啟動新的所述進程。本發(fā)明的有益效果本發(fā)明改善Web服務器通信服務穩(wěn)定性的方法在Web服務器上采用線程和進程協(xié)同完成ISAPI擴展任務的處理方式提供Web服務,消除了單純多線程通信服務不穩(wěn)定的因素,極大改善了Web服務器的通信服務穩(wěn)定性,本發(fā)明改善Web服務器通信服務穩(wěn)定性的方法是Web服務器技術的重大進步。本發(fā)明包括如下附圖圖1為現(xiàn)有技術Web服務示意圖;圖2為現(xiàn)有技術通過ISAPI醫(yī)學影像顯示接口層訪問集群存儲服務器上的影像數(shù)據(jù)示意圖;圖3為現(xiàn)有技術通過ISAPI醫(yī)學影像顯示接口層訪問集群存儲服務器上的影像數(shù)據(jù)流程圖;圖4為現(xiàn)有技術Web服務器進程IIS與ISAPI擴展程序在同一地址空間的示意圖;圖5為本發(fā)明技術方案示意圖;圖6為本發(fā)明設置管理進程進行資源管理的示意圖7為本發(fā)明將數(shù)據(jù)結構映射到共享內存區(qū)示意圖8為本發(fā)明Web服務線程的運行流程圖9為本發(fā)明Web服務管理進程運行流程圖10為本發(fā)明Web服務進程運行流程圖11為本發(fā)明實施例示意圖;圖12為本發(fā)明實施例通過任務管理器查看進程運行狀態(tài)的示意圖13為本發(fā)明實施例主進程日志示意圖14為本發(fā)明實施例子進程日志示意圖。具體實施例方式下面根據(jù)附圖和實施例對本發(fā)明作進一步詳細說明如圖5所示,為了保證Web服務器能夠提供穩(wěn)定的Web通信服務,把所有的處理任務量化成數(shù)據(jù)的輸入、處理、輸出三個環(huán)節(jié)。ISAPI擴展任務請求數(shù)據(jù)的輸入和處理結果數(shù)據(jù)的輸出只涉及到數(shù)據(jù)內容的拷貝,環(huán)節(jié)簡單不可能出現(xiàn)什么問題。問題主要出現(xiàn)在ISAPI擴展任務處理過程,由于影像處理的請求任務比普通的文字處理請求要復雜多變,處理過程可能出現(xiàn)的問題很難全部控制,所以將該環(huán)節(jié)獨立到Web服務程序之外來考慮,這樣就不會影響Web服務程序的穩(wěn)定性。如何能將ISAPI擴展任務處理環(huán)節(jié)獨立到Web服務程序(Web服務主進程)之外呢?我們使用了一種方法將每一個ISAPI擴展任務獨立成一個個進程,將并發(fā)處理的每一個線程任務對應一個進程,由每一個進程來處理該線程需要完成的任務,當發(fā)生一個ISAPI擴展任務時線程將輸入數(shù)據(jù)提交給該進程,由進程處理任務,線程等待進程處理,進程處理結束將結果傳給線程,線程返回請求結果。任務線程與處理進程通道的搭建由Web服務程序(Web服務主進程)或者管理進程來負責,Web服務主進程或者管理進程同時實現(xiàn)處理進程分配策略。當處理進程發(fā)生錯誤無法完成處理任務,線程結束等待返回錯誤信息,Web服務主進程或者管理進程將該處理進程關閉,重新啟動一個新的進程代替原進程。使用這種方法可以將處理環(huán)節(jié)獨立于服務程序(Web服務主進程)之外,避免系統(tǒng)處理錯誤導致崩潰的可能性。如圖6和圖7所示,根據(jù)上述說明,我們可以知道該方法的實現(xiàn)主要是分成三部分,分別是Web服務主進程(WebServerProcess)、數(shù)據(jù)交換區(qū)(SharedMemory)、ISAPI擴展任務進程(TaskProcess)。但是這三部分如何聯(lián)系起來以及如何避免線程相互搶奪資源呢?為了將這三部分有效的組織起來,還需要再引入一個管理進程(ManageProcess),由管理進程來對資源進行有效的分配。因為系統(tǒng)在運行的時候會為每個進程分配不同的內存區(qū)域,對不同進程來說,它們具有獨立的數(shù)據(jù)空間,要進行數(shù)據(jù)傳遞需要分配一個共享內存區(qū)(SharedMemory)。首先在啟動Web服務主進程的時候可以通過系統(tǒng)函數(shù)CreateFileMa卯ing創(chuàng)建一個共享內存區(qū),通過MapViewOfFile將內存區(qū)影射到進程地址中,然后定義三個數(shù)據(jù)結構,分別記錄是子進程屬性信息結構、進程選擇屬性信息結構和管理進程屬性信息結構子進程屬性信息結構structIXhildProcInfo{LProcStateState;〃進程當前狀態(tài)HANDLEProcessHandle;〃進程句柄DWORDProcessld;〃進程編號HWNDHandle;〃進程接收消息對象句柄DATE0penTime;〃進程打開時間DATESuspendTime;〃進程最后一次掛起時間DWORDChannelId;〃通道進程編號DWORDThreadld;〃通道線程編號intCommand;〃處理命令編號intDataState;〃數(shù)據(jù)讀寫狀態(tài)0:輸入,1:輸出,_1:錯誤boolIsLastFragment;〃是否為結尾數(shù)據(jù),True為數(shù)據(jù)傳輸結束intSize;〃數(shù)據(jù)大小charData;〃任務處理數(shù)據(jù)交換區(qū)};進程選擇屬性信息結構structLPipeProcInfo{DWORDProcessld;〃進程編號intRequest;〃向父進程請求通道句柄,O:無處理任務,1:有處理6任務intResult;〃返回值,ON:返回處理子進程索引DWORDChannelId;〃請求通道進程IDDWORDThreadld;〃請求通道線程ID};管理進程屬性信息結構structLParentProcInfo{HWNDHandle;〃父進程對象句柄intMaxProcCo皿t;〃子進程總數(shù)LPipeProcInfoChannel[100];〃任務進程選擇};將三個結構影射到共享內存區(qū)中,同時由Web服務主進程或者管理進程在共享內存區(qū)中設置進程狀態(tài)表,進程狀態(tài)表如表1所示,這樣進程間就可以知道各自的狀態(tài),以便如何進行下一步的操作。表1:;IJProcState.'■<table>tableseeoriginaldocumentpage7</column></row><table>對進程狀態(tài)的記錄后還需要一組用于進程間通信的消息命令,由Web服務主進程或者管理進程在共享內存區(qū)中設置進程消息表,進程消息表如表2所示。表2<table>tableseeoriginaldocumentpage7</column></row><table>如圖8、圖9和圖10所示,管理進程啟動后將進程消息句柄記錄在管理進程屬性信息結構中。為了避免啟動任務進程影響系統(tǒng)的運行效率,在啟動管理進程后由Web服務主進程或者管理進程預先啟動幾個處理子進程,使用CreateProcess啟動任務進程,函數(shù)調用結束后返回進程ID號,找出進程狀態(tài)表中未記錄進程信息的位置,將內容寫入該位置,同時將進程設置為pslnit狀態(tài)表示該任務進程正在啟動中,還不能接收任務處理。子進程啟動后通過系統(tǒng)函數(shù)OpenFileM即ping打開管理進程創(chuàng)建的共享內存區(qū),通過M即ViewOfFile將內存區(qū)影射到該進程地址中,這樣子進程就可以訪問進程信息列表中的信息。使用GetCurrendProcessId獲取該進程ID找出列表中記錄該進程的位置,將進程狀態(tài)修改為psSuspend,說明進程已經(jīng)啟動成功,可以執(zhí)行任務。同時使用PostMessage向管理進程發(fā)出WM_PR0CESS_0PEN消息,通知管理進程可以為該進程分配任務。管理進程進入等待任務求請狀態(tài),實時檢測管道進程屬性信息表變量Request屬性值,如果值為1表示需要分配一個資源給服務線程來處理任務。當Web服務主進程接收到一個任務請求時,首先判斷處理子進程屬性信息結構,該線程是否已經(jīng)分配了處理資源,如果已經(jīng)分配了資源,直接向處理進程發(fā)出處理請求,如果未分配資源,將管道進程屬性信息變量Request值設為1,向管理進程發(fā)出請求,管理進程為該線程分配資源,將Result設置為0N的值,指定處理子進程屬性信息具體的位置,同時向分配進程發(fā)出WM_PROCESS_EXECUTE消息,通知進程進入執(zhí)行狀態(tài)。如果所有的進程都處于處理狀態(tài),管理進程直接啟動一個進程來執(zhí)行任務。的到資源后線程向該結構分別填寫Command:處理命令信息,DataState:0輸入狀態(tài),Size:輸入數(shù)據(jù)大小,Data:數(shù)據(jù)內容,State:進程狀態(tài)設為psExecute,然后等待進程處理結束返回結果。如果Data定義的最大空間不能放下輸入的數(shù)據(jù),可以采用多次填入數(shù)據(jù)的方法來實現(xiàn)大數(shù)據(jù)的輸入,采用IsLastFragment來識別數(shù)據(jù)是否傳輸完成。處理進程接收到處理任務,從子進程屬性信息結構中讀取數(shù)據(jù),進行處理,處理結束后向任務線程返回處理結果,分別填寫DataState:l輸出狀態(tài),Size:輸出數(shù)據(jù)大小,Data:數(shù)據(jù)內容。如果處理錯誤DataState值-l處理錯誤。如果Data定義的最大空間不能放下輸出的數(shù)據(jù),可以采用多次填入數(shù)據(jù)的方法來實現(xiàn)大數(shù)據(jù)的輸出,采用IsLastFragment來識別數(shù)據(jù)是否傳輸完成。任務線程判斷DataState狀態(tài)如果值為1,說明任務處理完成讀取Data數(shù)據(jù),將內容返回給Web瀏覽器,結束任務。如果值為-1,說明處理錯誤,將進程狀態(tài)設置為psError,結束任務。管理進程定期檢測各進程狀態(tài),發(fā)現(xiàn)有psError狀態(tài)進程,將其關閉。為了提高線程與進程交互效率,避免任務線程每次處理都要向管理進程申請資源,所以當進程任務處理完后,并沒有直接退出執(zhí)行狀態(tài),仍然記錄對應線程信息,延遲一段時間,等待該線程的下一次處理任務。延遲一段時間,如果未接收到對應線程任務,處理子進程重新進入psSuspend狀態(tài)將掛起時候記錄在信息列表結構變量SuspendTime中,同時發(fā)管理進程發(fā)出WM_PR0CESS_SUSPEND消息,通知管理進程該處理進程可以接收下一個線程任務。每個任務進程都設置了一個生存期,然后通過與SuspendTime時間進行比較來判斷是否已經(jīng)超過了進程的生存期。如果進程已經(jīng)超過生存期結束進程,向Web服務主進程或者管理進程發(fā)出WlLPROCESS—CLOSE消息。由于每個進程都有一定的生存期,也就是說過一段時間后所有的舊進程都會被關閉,如果沒有了任務進程,就無法接收任務請求,所以Web服務主進程或者管理進程設置了一個初始默認啟動進程數(shù),如果進程數(shù)量小于初始默認啟動進程數(shù),Web服務主進程或者管理進程會啟動新的任務進程來補充處理任務。使用定期更換進程的方法可以進一步提高系統(tǒng)的穩(wěn)定性。當系統(tǒng)關閉的時候Web服務主進程或者管理進程會向各處理子進程發(fā)出WM_PR0CESS_ST0P消息,要求關閉所有處理。使用該方法,Web服務主進程內的線程任務只負責將任務輸入數(shù)據(jù)拷入到數(shù)據(jù)交換區(qū),然后等待處理結果,處理結束后再從數(shù)據(jù)交換區(qū)拷出輸出數(shù)據(jù)返回結Web瀏覽器,Web服務主進程內部環(huán)節(jié)簡單,穩(wěn)定性高。具體實施例如圖11所示,在醫(yī)學影像應用中,為了實現(xiàn)跨internet訪問遠端的存儲服務器影像數(shù)據(jù),使用本方法開發(fā)了一個基于Web的醫(yī)學影像顯示接口層,通過該接口層Web瀏覽器就可以訪問到PACS集群存儲服務器上的影像數(shù)據(jù),將其傳送到Web瀏覽器上。Web服務器上包括三個應用程序,分別是WebPACS.dll該程序是ISAPI擴展動態(tài)庫用于接收瀏覽器的訪問請求,WebServerManage.exe,負責管理處理進程,WebServerChild.exe,負責處理WebPACS.dll接收的處理任務。圖12所示是應用程序實例后在任務管理器中的表現(xiàn)方式,w3wp.exe是Window2003系統(tǒng)IIS的Web服務實現(xiàn)程序,由它加載WebPACS.dll。WebPACS.dll、WebServerManage和WebServerChild實例化后的具體運行流程WebServerManage.exe主進程啟動后將進程消息句柄記錄在屬性信息中。為了避免啟動任務進程影響系統(tǒng)的運行效率,在啟動管理主進程后應該預先啟動幾個處理子進程,使用CreateProcess啟動任務進程,函數(shù)調用結束后返回進程ID號,找出子進程信息列表中未記錄進程信息的位置,將內容寫入該位置,同時將進程設置為pslnit狀態(tài)表示該WebServerChild.exe任務進程正在啟動中,還不能接收任務處理。WebServerChild.exe子進程啟動后打開管理進程創(chuàng)建的共享內存區(qū),將其影射到該進程地址中,這樣處理子進程就可以訪問進程信息列表中的信息。將進程狀態(tài)修改為psSuspend,說明進程已經(jīng)啟動成功,可以執(zhí)行任務。同時使用PostMessage向管理主進程發(fā)出WM_PR0CESS_0PEN消息,通知管理主進程可以為該進程分配任務。WebServerManage.exe主進程進入等待任務求請狀態(tài),實時檢測管道進程屬性信息表變量Request屬性值,如果值為1表示需要分配一個資源給服務線程來處理任務。當Web服務接收到一個任務請求時,WebPACS.dll啟動一個線程任務,首先判斷處理子進程屬性信息結構,該線程是否已經(jīng)分配了處理資源,如果已經(jīng)分配了資源,直接向WebServerChild.exe處理進程發(fā)出處理請求,如果未分配資源,將管道進程屬性信息變量Request值設為1,向WebServerManage.exe主進程發(fā)出請求,管理進程為該線程分配資源,將Result設置為0N的值,指定處理子進程屬性信息具體的位置,同時向分配進程發(fā)出WM_PROCESS_EXECUTE消息,通知WebServerChild.exe進程進入執(zhí)行狀態(tài)。如果所有的進程都處于處理狀態(tài),管理進程直接啟動一個進程來執(zhí)行任務。的到資源后線程向該結構分別填寫Command:處理命令信息,DataState:0輸入狀態(tài),Size:輸入數(shù)據(jù)大小,Data:數(shù)據(jù)內容,State:進程狀態(tài)設為psExecute,然后等待進程處理結束返回結果。如果Data定義的最大空間不能放下輸入的數(shù)據(jù),可以采用多次填入數(shù)據(jù)的方法來實現(xiàn)大數(shù)據(jù)的輸入,采用IsLastFragment來識別數(shù)據(jù)是否傳輸完成。例如客戶端需要將PACS服務器上的DICOM圖像文件專換成一個JPG格式文件,返回到Web瀏覽器上進行顯示,可以在Web瀏覽器輸入如下命令http://www.testwado.com/WebPACS.dllwadorequestType=WADO9&studyUID=1.2.826.0.1.3680043.2.461.20041015144704.1956.0410150046&seriesUID=1.2.840.113564.10.1.35698029491047416502138619819516012856218&objectUID=1.2.840.113564.10.1.229317351633176186331581051171102532328274&contentType=image%2Fjpeg&columns=800&rows=800&windowCenter=1500&windowWidth=2000&imageQuality=90當服務器接收到這條命令后,htto:〃www.testwado.固/WebPACS.dll為IIS解析內容,后面參數(shù)我們通過WebPACS.dll將內容寫入處理子進程屬性信息結構傳送給WebServerChild.exe進行處理。WebServerChild.exe進程接收到處理任務,從處理子進程屬性信息表中讀取數(shù)據(jù),首先到PACS存儲服務器讀取對應的DICOM圖像文件,然后根據(jù)輸入?yún)?shù)將寬高設置成800X800,窗寬窗位設置成麗2000WL1500,以90的壓縮率轉換成JPG圖像文件,處理結束后向任務線程返回處理結果,分別填寫DataState:l輸出狀態(tài),Size:輸出數(shù)據(jù)大小,Data:數(shù)據(jù)內容。如果處理錯誤DataState值-l處理錯誤。如果Data定義的最大空間不能放下輸出的數(shù)據(jù),可以采用多次填入數(shù)據(jù)的方法來實現(xiàn)大數(shù)據(jù)的輸出,采用IsLastFragment來識別數(shù)據(jù)是否傳輸完成。WebPACS.dll任務線程判斷DataState狀態(tài)如果值為l,說明任務處理完成讀取Data數(shù)據(jù),將內容返回給Web瀏覽器,結束任務。如果值為-l,說明處理錯誤,將進程狀態(tài)設置為psError,結束任務。管理進程定期檢測各進程狀態(tài),發(fā)現(xiàn)有psError狀態(tài)進程,將其關閉。為了提高WebPACS.dll線程與WebServerChild.exe進程交互效率,避免任務線程每次處理都要向管理進程申請資源,所以當進程任務處理完后,并沒有直接退出執(zhí)行狀態(tài),仍然記錄對應線程信息,延遲一段時間,等待該線程的下一次處理任務。延遲一段時間,如果未接收到對應線程任務,WebServerChild.exe進程重新進入psSuspend狀態(tài)將掛起時候記錄在信息列表結構變量SuspendTime中,同時向管理進程發(fā)出WM_PROCESS_SUSPEND消息,通知管理進程該處理進程可以接收下一個線程任務。我們?yōu)槊總€WebServerChild.exe進程設置了一個生存期,然后通過與SuspendTime時間進行判斷來確認是否已經(jīng)超過了進程的生存期。如果進程已經(jīng)超過生存期結束進程,向管理進程發(fā)出WM_PROCESS_CLOSE消息。由于每個WebServerChild.exe進程都有一定的生存期,也就是說過一段時間后所有的舊進程都會被關閉,如果沒有了WebServerChild.exe進程,就無法接收任務請求,所以WebServerManage.exe進程設置了一個初始默認啟動進程數(shù),如果進程小于指定數(shù)量,管理進程會啟動新的任務進程來補充處理任務。使用定期更換進程的方法可以進一步提高系統(tǒng)的穩(wěn)定性。當系統(tǒng)關閉的時候WebServerManage.exe進程會向各WebServerChild.exe子進程發(fā)出WM_PR0CESS_ST0P消息,要求關閉所有處理。如圖13和圖14所示,在主進程日志中可以了解到各任務進程的使用情況,在子進程日志中可以了解到進程訪問存儲服務器數(shù)據(jù)及返回web數(shù)據(jù)的使用情況。使用該方法,Web服務程序內的線程任務只負責將任務輸入數(shù)據(jù)拷貝到數(shù)據(jù)交換區(qū),然后等待處理結果,處理結束后再從數(shù)據(jù)交換區(qū)拷貝輸出數(shù)據(jù)返回結Web瀏覽器,服務進程內部環(huán)節(jié)非常簡單,穩(wěn)定性高。當WebServerChild.exe處理當前一次任務的時候發(fā)生未知的異常錯誤,中止了程序,WebPACS.dll任務線程等待處理過程,延遲一段時間后認為系統(tǒng)錯誤,結束等待,向瀏覽器回返錯誤信息,這樣不會影響到Web服務的穩(wěn)定性。本領域技術人員不脫離本發(fā)明的實質和精神,可以有多種變形方案實現(xiàn)本發(fā)明,以上所述僅為本發(fā)明較佳可行的實施例而已,并非因此局限本發(fā)明的權利范圍,凡運用本發(fā)明說明書及附圖內容所作的等效結構變化,均包含于本發(fā)明的權利范圍之內。1權利要求一種改善Web服務器通信服務穩(wěn)定性的方法,其特征在于,包括步驟A1、在Web服務器上建立Web服務主進程;A2、所述Web服務主進程將ISAPI擴展任務程序加載到內存中;A3、在所述Web服務器與客戶端進行通信時,所述Web服務主進程啟動相應的線程執(zhí)行所述ISAPI擴展任務程序,并同時啟動相應的進程完成所述線程要求的處理任務,所述Web服務主進程開辟所述線程和所述進程之間進行通信的共享內存區(qū)。2.根據(jù)權利要求l所述的改善Web服務器通信服務穩(wěn)定性的方法,其特征在于,所述步驟A3包括步驟建立管理進程,由所述管理進程為所述線程和所述進程在所述共享內存區(qū)內分配內存資源。3.根據(jù)權利要求2所述的改善Web服務器通信服務穩(wěn)定性的方法,其特征在于,所述步驟A3包括步驟所述Web通信服務主進程在所述共享內存區(qū)內設置進程狀態(tài)表,所述進程狀態(tài)表用于標記線程和進程的狀態(tài)。4.根據(jù)權利要求3所述的改善Web服務器通信服務穩(wěn)定性的方法,其特征在于,所述步驟A3包括步驟所述Web服務主進程在所述共享內存區(qū)內設置進程消息表,所述進程消息表用于存儲進程間進行通信的消息內容。5.根據(jù)權利要求4所述的改善Web服務器通信服務穩(wěn)定性的方法,其特征在于,所述步驟A3包括步驟所述Web服務主進程在所述共享內存區(qū)內設置子進程屬性信息結構,所述子進程屬性信息結構用于標記所述進程的相關信息。6.根據(jù)權利要求5所述的改善Web服務器通信服務穩(wěn)定性的方法,其特征在于,所述步驟A3包括步驟所述Web服務主進程在所述共享內存區(qū)內設置進程選擇屬性信息結構,所述進程選擇屬性信息結構用于標記所述進程與其它進程的關系信息。7.根據(jù)權利要求6所述的改善Web服務器通信服務穩(wěn)定性的方法,其特征在于,所述步驟A3包括步驟所述Web服務主進程在所述共享內存區(qū)內設置管理進程屬性信息結構,所述管理進程屬性信息結構用于記錄所述管理進程的管理信息。8.根據(jù)權利要求7所述的改善Web服務器通信服務穩(wěn)定性的方法,其特征在于,所述步驟A3包括步驟所述線程將ISAPI擴展任務數(shù)據(jù)拷入到所述共享內存區(qū)內的數(shù)據(jù)交換區(qū),然后等待處理結果。9.根據(jù)權利要求8所述的改善存儲服務器通信服務穩(wěn)定性的方法,其特征在于為所述進程設置生存期,超過生存期的所述進程將結束運行。10.根據(jù)權利要求9所述的改善存儲服務器通信服務穩(wěn)定性的方法,其特征在于所述Web服務主進程設置初始默認啟動子進程數(shù),如果處于生存狀態(tài)的所述進程數(shù)量小于所述初始默認啟動子進程數(shù),所述Web服務主進程啟動新的所述進程。全文摘要本發(fā)明公開了一種改善Web服務器通信服務穩(wěn)定性的方法,包括步驟A1、在Web服務器上建立Web服務主進程;A2、所述Web服務主進程將ISAPI擴展任務程序加載到內存中;A3、在所述Web服務器與客戶端進行通信時,所述Web服務主進程啟動相應的線程執(zhí)行所述ISAPI擴展任務程序,并同時啟動相應的進程完成所述線程要求的處理任務,所述Web服務主進程開辟所述線程和所述進程之間進行通信的共享內存區(qū)。文檔編號H04L29/06GK101782864SQ200910188548公開日2010年7月21日申請日期2009年12月1日優(yōu)先權日2009年12月1日發(fā)明者陳閩峰申請人:深圳市藍韻實業(yè)有限公司