專利名稱::Http對話控制的制作方法
技術領域:
:本發(fā)明領域本發(fā)明涉及例如在互聯(lián)網(wǎng)絡上進行的網(wǎng)絡通信,尤其涉及對互聯(lián)網(wǎng)絡上HTTP通信的對話控制。本發(fā)明背景互聯(lián)網(wǎng)絡是一種分布式網(wǎng)絡,它包括與遠程客戶機通信的一批服務器。萬維網(wǎng)(WorldWideWeb)是指在互聯(lián)網(wǎng)絡上可利用的這批服務器。這樣,網(wǎng)(Web)形成互聯(lián)網(wǎng)絡上任何可利用的服務器與客戶機之間的通信路徑。在萬維網(wǎng)上的客戶機通常是網(wǎng)上瀏覽器。它們是一些程序,向互聯(lián)網(wǎng)絡上的服務器發(fā)出請求并且隨后處理和顯示由服務器返回的網(wǎng)頁。萬維網(wǎng)服務器也是一個程序,處理來自瀏覽器的請求并且安排文件到發(fā)出請求的瀏覽器。這些文件通常是超文本標記語言(HTML)構成的,它是一種在萬維網(wǎng)上被瀏覽器和服務器普遍認可的語言。為了讀出由服務器返回的網(wǎng)頁,瀏覽器可以執(zhí)行一種底稿編制(scripting)語言來顯示返回的網(wǎng)頁。通常的底稿編制語言是所謂的javascript和visualbasicscript。超文本標記語言(HTML)是一種命令格式,用于通知瀏覽器如何顯示一個返回的網(wǎng)頁。它也可以規(guī)定幕后的信息,如另外的圖形或底稿編制語言。在服務器和瀏覽器之間的網(wǎng)頁通信中,使用的通信協(xié)議是所謂的超文本傳輸協(xié)議(HTTP)。這是由萬維網(wǎng)使用的用于協(xié)調網(wǎng)上服務器和網(wǎng)上瀏覽器之間通信的通信協(xié)議。通常,網(wǎng)上瀏覽器將請求和接收來自網(wǎng)上服務器的“靜態(tài)的”萬維網(wǎng)網(wǎng)頁。靜態(tài)的網(wǎng)頁的特征在于網(wǎng)頁數(shù)據(jù)是預先編寫的并且是固定的。然而,偶爾一個網(wǎng)上服務器會運行程序來為一個瀏覽器提供動態(tài)的內容。例如,當服務器與一個信息數(shù)據(jù)庫(該數(shù)據(jù)庫可以由用戶通過瀏覽器訪問或修改)通信時,服務器可以發(fā)送包含當前狀態(tài)下數(shù)據(jù)庫信息的網(wǎng)頁。即當一個用戶通過瀏覽器連接到網(wǎng)上服務器以訪問或修改數(shù)據(jù)庫條目時,后面訪問該服務器的另一個瀏覽器將檢索到修改的數(shù)據(jù)庫信息。允許網(wǎng)上服務器運行一個程序以便發(fā)送動態(tài)內容的機構稱為公共網(wǎng)關接口。當前,網(wǎng)上每個服務器包括一個訪問日志。這個日志是一個文件,包含互聯(lián)網(wǎng)絡上的的瀏覽器對網(wǎng)上服務器的每次訪問的詳情。包括在這個日志上的詳情包括訪問日期、訪問時間、請求者的計算機標識(地址)、請求的信息、多少信息被發(fā)送給用戶,以及可能的話包括傳送狀態(tài)。另外,網(wǎng)上每個瀏覽器(客戶機)包括一個超高速緩沖存儲器,該存儲器保存一定數(shù)量的檢索的網(wǎng)頁,使得這些網(wǎng)頁不用經(jīng)過互聯(lián)網(wǎng)絡從服務器上重新加載,以便用戶快速地檢索。兩個計算機(例如,一個服務器和一個瀏覽器)連接在一起的時間量稱為一個“對話”。一般地,一個對話通常從一個客戶機開始與服務器通信的時間延續(xù)到該客戶機退出通信的時間。然而,在網(wǎng)上稍微不同地定義一個對話。在一些非互聯(lián)網(wǎng)絡的客戶機/服務器數(shù)據(jù)傳送中,客戶機和服務器在它們之間建立一個連接,在此期間,客戶機可以從服務器請求信息并且服務器提供信息給該客戶機。在這些情況下,客戶機和服務器之間的“對話”從客戶機和服務器之間實現(xiàn)連接的時間開始直到客戶機或服務器退出對話為止。在對話期間,任何數(shù)量的數(shù)據(jù)傳送和數(shù)據(jù)請求能夠在客戶機和服務器之間發(fā)生。然而,在網(wǎng)上超文本傳送協(xié)議和萬維網(wǎng)結構的限制使得網(wǎng)上客戶機和服務器遵守一種非標準的“對話”概念。在網(wǎng)上,一個對話僅僅包括一個網(wǎng)頁(數(shù)據(jù)文件或者圖形文件等等)被請求并且被下載給用戶(瀏覽器)的時間。這樣,網(wǎng)上客戶機和網(wǎng)上服務器之間的每個對話相當于從客戶機到服務器請求一個網(wǎng)頁和從服務器到客戶機傳送一個網(wǎng)頁。這樣,記錄在服務器日志中的對話信息將標識網(wǎng)頁請求的日期、網(wǎng)頁請求的時間、進行網(wǎng)頁請求的計算機、識別被請求的網(wǎng)頁的文件信息、發(fā)送到請求計算機以發(fā)送網(wǎng)頁的字節(jié)數(shù),以及有可能的話還有傳送狀態(tài)。這樣,互聯(lián)網(wǎng)絡不像一個客戶計算機連接到另一個服務器計算機以訪問例如一個數(shù)據(jù)庫的典型情況。在典型的情況下,客戶機用戶將在保留對服務器的連接的同時檢查一個數(shù)據(jù)庫記錄。在這樣一種情況下,服務器可以記錄客戶機訪問數(shù)據(jù)庫的持續(xù)時間。這些記錄可以用于統(tǒng)計分析關于用戶觀看記錄花費多少時問,因為對話是由連接到數(shù)據(jù)庫和退出數(shù)據(jù)庫的持續(xù)時間定義的。也可以“鎖定”數(shù)據(jù)庫記錄,防止其他客戶機訪問它,直到這個客戶機完成為止。對于互聯(lián)網(wǎng)絡連接來說是不同的,因為一個對話不是由一個客戶機和一個服務器之間總的連接時間定義的,而是由一個單個網(wǎng)頁請求和一個單個網(wǎng)頁發(fā)送的時間定義的。在互聯(lián)網(wǎng)絡的情況下,服務器無法知道何時用戶已經(jīng)完成使用一個特定的記錄,也不知道用戶觀看一個特定的記錄多長時間?,F(xiàn)有方法試圖通過當用戶完成一個記錄時使用人工方法通知服務器來解決這個問題,但是這樣的系統(tǒng)是依賴于客戶機的,不能在服務器上單獨實現(xiàn)。這樣,當對于服務器來說重要的是準確地知道何時用戶用完一個記錄或準確地知道用戶觀看一個記錄多長時間時,當前的網(wǎng)結構不能提供一種有效的解決方案。在互聯(lián)網(wǎng)絡環(huán)境中暴露這個問題的一個例子在當兩個用戶試圖經(jīng)過網(wǎng)訪問數(shù)據(jù)庫信息時出現(xiàn)。例子中假定用戶A對位于一個倉庫的特定的產品X請求產品庫存的信息。該倉庫使用網(wǎng)上服務器將關于各種產品的庫存數(shù)量的信息提供給用戶。還假定當用戶A請求庫存信息時當前可以在倉庫得到200個單位的產品X。根據(jù)用戶A對標識產品X庫存的網(wǎng)頁的請求,倉庫服務器將查看它的數(shù)據(jù)庫,取出庫存數(shù)量“200”并且將標識這個數(shù)量的網(wǎng)頁提供給用戶A。然后,假設另一個用戶,用戶B請求相同的產品X的庫存信息。倉庫服務器會接收來自用戶B的網(wǎng)頁請求,查看它的數(shù)據(jù)庫,看到一個產品X數(shù)量200,并且發(fā)送一個標識產品X庫存有“200”個可得到單位的網(wǎng)頁。隨后當用戶A在另一個網(wǎng)頁請求中告訴倉庫服務器它要從可得到的200個單位中定購150個單位時問題出現(xiàn)了。倉庫服務器會根據(jù)用戶A的定單將減少150個單位寫入它的數(shù)據(jù)庫。然后,用戶B通過發(fā)送一個定購請求到倉庫服務器試圖從倉庫服務器請求100個單位。倉庫服務器產生一個問題,在它僅有200個可得到的單位時卻接收了250個單位的定單。在上面的例子中,重要的是倉庫服務器不根據(jù)用戶B的網(wǎng)頁請求向用戶B提供網(wǎng)頁,直到服務器知道用戶A用完了相同的網(wǎng)頁。如果用戶A不能通過某些方法人工地向倉庫服務器指示它已經(jīng)完成對產品X庫存網(wǎng)頁的使用,則倉庫服務器不可能知道是否將相同的產品庫存網(wǎng)頁發(fā)送給用戶B是及時地和準確地。在網(wǎng)上限定的對話定義產生問題的另一個例子是需要為統(tǒng)計目的進行對話控制的情況。例如,當在網(wǎng)上做廣告的公司想知道某人已經(jīng)觀看它們的網(wǎng)頁、或者帶有它們廣告的網(wǎng)頁多長時間時,這個問題產生了。由于根據(jù)當前網(wǎng)上對話定義,其中一個對話僅是一個網(wǎng)頁請求和一個網(wǎng)頁發(fā)送,在沒有某些人工方法的情況下服務器不知道用戶觀看一個網(wǎng)頁或廣告多長時間。這樣,沒有標識客戶機使用一個特定網(wǎng)頁結束的方法,服務器不知道用戶已經(jīng)觀看一個網(wǎng)頁多長時間。圖1表明互聯(lián)網(wǎng)絡對話的當前狀態(tài)。在圖1中,系統(tǒng)1包括一些數(shù)量的客戶機,從客戶機no.1到客戶機no.n??蛻魴C通過互聯(lián)網(wǎng)連接10訪問一些服務器,包括服務器12。如圖1所示,服務器12在“A”和“B”指示的對話期間接收來自客戶機的請求。在對話A期間,客戶機no.1經(jīng)過互聯(lián)網(wǎng)絡10通知服務器12它希望接收一個特定標識的網(wǎng)頁(“給我一個網(wǎng)頁”)。服務器12通過組裝網(wǎng)頁并且通過互聯(lián)網(wǎng)絡10將它發(fā)射到客戶機no.1來響應這個請求(“這是您的網(wǎng)頁”)。這一對通信(“給我一個網(wǎng)頁”和“這是您的網(wǎng)頁”)是客戶機no.1和服務器12之間對于整個對話“A”的全部通信。類似地,如對話“B”所示,客戶機no.n也可以從服務器12請求網(wǎng)頁。在對話B中,客戶機n也從服務器12請求網(wǎng)頁并且接收來自服務器12的網(wǎng)頁。如上面討論的,當客戶機no.1和客戶機no.n基本上同時在對話A和對話B期間從服務器12請求相同的網(wǎng)頁并且這樣可能以一種重疊的方式修改服務器12中的記錄時問題就出現(xiàn)了。在這樣一種情況下,服務器12可能根據(jù)來自客戶機的重疊的請求錯誤地修改數(shù)據(jù)庫16。另外的問題是,服務器12不能識別對話A或對話B持續(xù)多長時間,即使它在它的訪問日志14中記錄了對話時間,因為對話分別以單獨的一個網(wǎng)頁請求和一個網(wǎng)頁發(fā)送來開始和結束。本發(fā)明概述本發(fā)明的定義提供了互聯(lián)網(wǎng)絡上的對話控制,使得服務器能夠識別何時和多長時間一個客戶機訪問由服務器發(fā)送的一個網(wǎng)頁。本發(fā)明通過對發(fā)送給客戶機的每個網(wǎng)頁連接標識“心動節(jié)拍(heartbeat)”程序的信息來完成這一點,該程序使得在發(fā)送的網(wǎng)頁被觀看時網(wǎng)頁以定義的間隔將一個節(jié)拍(beat)返回給服務器。在最簡單的例子中,服務器會將一個網(wǎng)頁返回到客戶機,它每分鐘發(fā)送一個節(jié)拍返回到服務器直到客戶機完成觀看網(wǎng)頁為止。通過記錄網(wǎng)頁返回的這些節(jié)拍,服務器隨后可以通過察查在觀看期間由網(wǎng)頁返回的節(jié)拍次數(shù)來近似地識別一個客戶機觀看一個特定網(wǎng)頁多長時間。例如,如果在上面的例子中返回5個節(jié)拍,服務器能夠得出結論,該客戶機觀看網(wǎng)頁多于5分鐘,但少于6分鐘。另外,客戶機在6分鐘結束時知道網(wǎng)頁已經(jīng)被釋放并且隨后可以被一個新的客戶機訪問而不會與原來的那個重疊。雖然本發(fā)明沒有提供互聯(lián)網(wǎng)絡上的純對話控制,但它將很好的信息提供給服務器以識別何時和多長時間一個網(wǎng)頁被訪問,以避免重疊并產生統(tǒng)計信息。另外,可通過平衡節(jié)拍頻率與統(tǒng)計抽樣容差的比值使用本發(fā)明。即,每分鐘產生節(jié)拍在互聯(lián)網(wǎng)絡容量和客戶機處理器使用上較難以負擔,但是比例如每5分鐘產生的節(jié)拍提供了更準確的結果。附圖的簡要說明圖1是一個根據(jù)現(xiàn)有技術在互聯(lián)網(wǎng)絡的客戶機和服務器之間互聯(lián)網(wǎng)絡對話的簡化示意圖;圖2到圖4是表示根據(jù)本發(fā)明的若干示范實施例在客戶機和服務器之間發(fā)生的通信的示意時間圖;圖5是一個根據(jù)本發(fā)明的示范實施例通信的服務器12示范實施例的示意方框圖;圖6是一個根據(jù)本發(fā)明的示范實施例的圖5服務器12的訪問日志的條目。圖7是一個根據(jù)本發(fā)明另一個示范實施例的圖5示范服務器12的示意圖;圖8是一個在與一個客戶機的示范通信對話期間服務器12的內部和外部通信的示意時間圖;以及圖9是一個根據(jù)本發(fā)明的示范實施例說明在一個服務器和兩個不同客戶機之間通信對話的示意時間圖。優(yōu)選實施例的詳細說明每當一個客戶機,如圖1的客戶機no.1發(fā)送一個網(wǎng)頁請求到服務器12,服務器12就在訪問日志14中產生一個對于該請求的日志條目。典型的日志條目如下所示elara.planet.bt.co.uk--[12/may/1994101011-400]”GET/icons/blank.xbmHTTP/1.0”200509在上面的日志條目中,“elara.planet.bt.co.uk”是客戶計算機的地址。請求的日期和時間在括號中示出,以請求類型結束(在例子中是“400”)。括號信息后面是一個命令,檢索一個指示的文件(“icons/blank.xbm”)。下面是協(xié)議(HTTP/1.0),接著是返回代碼(200)和請求文件的字節(jié)數(shù)(509)。在上面的例子中,插入到服務器12訪問日志14的條目是一個由客戶機“elara.planet.bt.co.uk”在1994年5月12日10∶10∶11的請求,該請求用于以HTTP格式從服務器12檢索稱為“icons/blank.xbm”的文件。每次客戶機在與服務器12的對話(圖1的A或B)中請求一個網(wǎng)頁時,在服務器12的訪問日志14中做出一個類似的條目。以上述方法形成訪問日志14在現(xiàn)有技術中是公知的,并且將是客戶機從服務器12請求網(wǎng)頁的各種對話的數(shù)量和時間的準確的記錄。然而,它不記錄一個客戶機訪問一個特定網(wǎng)頁的持續(xù)時間。過去,一些完成網(wǎng)上報告的程序通過觀看服務器提供的網(wǎng)頁上特定客戶機點擊的歷史,進行關于一個客戶機停留在一個特定網(wǎng)頁上多長時間的統(tǒng)計推測。然而,無法從現(xiàn)有技術訪問日志方法知道是否該統(tǒng)計推測是客戶機花費在特定網(wǎng)頁上持續(xù)時間的有效指示。本發(fā)明通過產生一系列可能結束對話的請求來繞過缺少網(wǎng)上對話信息的問題。在它最簡單的實施例中,本發(fā)明僅僅要求將一個很小的底稿編制語言函數(shù)放在服務器12報告的每個網(wǎng)頁上,以及將簡單的CGI底稿放在服務器12上。放在服務器12提供的每個網(wǎng)頁上的底稿編制語言函數(shù)將使得網(wǎng)頁以定義的間隔產生一個節(jié)拍消息到服務器12。放在服務器12上的簡單的CGI底稿隨后接收這些節(jié)拍,記錄它們,并且以下面更詳細描述的方式應答它們。用非專業(yè)術語來說,由網(wǎng)頁提供的節(jié)拍實質上告訴服務器,客戶機正在繼續(xù)利用網(wǎng)頁,并且來自服務器的應答是一個“當前網(wǎng)頁沒有變化”的應答。以這種方式,當前的對話控制系統(tǒng)實質上對于用戶是不可見的。圖2說明一個本發(fā)明的示范實施例,其中一個客戶機和一個服務器交換本發(fā)明的對話控制信息。注意在圖2中,從客戶機到服務器的通信用右箭頭示出,而從服務器到客戶機的通信用左箭頭示出。另外,在圖2中,通信從圖2的頂端到圖2的底部按時間順序安排。注意圖3、4、5、6、8和9類似地從相應圖的頂端到底部按時間順序安排。在圖2中,客戶機和服務器之間第一次兩個通信與相對于圖1描述的現(xiàn)有技術情況是相同的。即,客戶機通過向服務器請求“給我網(wǎng)頁X”開始一個對話(如圖1的對話A)。服務器隨后按照上述的示范日志條目將該請求登記到日志14上。服務器隨后在響應“這里是您的網(wǎng)頁”中用請求的網(wǎng)頁來響應客戶機。這個網(wǎng)頁與現(xiàn)有技術網(wǎng)頁不同,即該網(wǎng)頁包括將產生以后的節(jié)拍的底稿編制語言函數(shù)。以后詳細描述一個示范底稿編制語言函數(shù)。一旦客戶機接收到網(wǎng)頁,底稿編制函數(shù)將等待一個預定的時間X0并且隨后將產生一個對服務器的請求,實質上告訴服務器“我還在這里”,意味著在網(wǎng)頁被客戶機接收之后客戶機仍然使用網(wǎng)頁X一個時間X0。在接收網(wǎng)頁之后對服務器的該第一個響應被稱為第一個節(jié)拍。響應于第一個節(jié)拍,服務器將該節(jié)拍登記到訪問日志中并且隨后通過實質上發(fā)送給客戶機一個空頁來響應,它可以被解釋為“0K--我明白您還在網(wǎng)頁X上”。在第一個節(jié)拍被發(fā)送到服務器的第一個時間間隔X0之后,網(wǎng)頁等待另一個時間間隔(X1)并且發(fā)送第二個節(jié)拍到服務器。服務器登記這個節(jié)拍并且應答。該過程隨后在間隔X2和X3期間繼續(xù)。最后,在發(fā)送周期X3之后的節(jié)拍以后,服務器知道客戶機已經(jīng)留開網(wǎng)頁X,因為來自客戶機的節(jié)拍已經(jīng)停止。在任何情況下,圖2示范實施例中的服務器已經(jīng)在它的訪問日志14中登記了足夠的信息來指示客戶機請求網(wǎng)頁X以及停留在網(wǎng)頁上的時間至少為(X0+X1+X2+X3)。另外,因為在圖2的實施例中,節(jié)拍持續(xù)時間(X1,X2和X3)是統(tǒng)一的長度(如在以后實施例中描述的,它不是本發(fā)明必需的),服務器日志包含的信息足以知道客戶機停留在網(wǎng)頁X上的持續(xù)時間大于(X0+3X1),但小于(X0+4X1)。圖3和圖4示出本發(fā)明的其它示范實施例,它們可以用于累加不同類型的數(shù)據(jù)。圖3和圖4是圖2所示類型的簡化圖,為了簡便起見服務器和服務器響應被省略。圖2、3和4的實施例之間的差別是由網(wǎng)頁提供到服務器的節(jié)拍的構成和持續(xù)時間。在圖2中,節(jié)拍(X1,X2,X3)以一致的間隔安排。在圖3中,第一個節(jié)拍在間隔X4發(fā)生,以后節(jié)拍No.2在X4持續(xù)時間的大約四倍內不發(fā)生。然后,節(jié)拍No.3和No.4等等如第一個節(jié)拍發(fā)生在相同的持續(xù)時間。即,在圖3中,4X4=X5=4X6等等。圖3的實施例可能與統(tǒng)計確定有關,這里廣告商想知道是否用戶停留在一個網(wǎng)頁上的時間長到足以注意到廣告(X4),但并不真正關心用戶停留多少時間,除非該時間非常長(T=X5),這時廣告商可能很想準確地知道用戶停留在網(wǎng)頁上多長時間,它可以通過增加節(jié)拍頻率(T=X6)來示出。圖4示出本發(fā)明的另一個示范實施例,其中節(jié)拍頻率隨著時間增加。圖4的例子可能相關于例如在兩個用戶可能訪問相同的數(shù)據(jù)庫并且服務器希望輪詢第一個用戶以確定何時該用戶用完數(shù)據(jù)庫以便允許第二個用戶隨后訪問該數(shù)據(jù)庫的情況。在這種情況下,服務器期望在請求第一個節(jié)拍之前給用戶一個一定(更長)的時間量(T=X7)。以后,服務器會請求更頻繁的節(jié)拍以確定何時用戶離開該系統(tǒng)。當某人知道一個用戶被期望在退出網(wǎng)頁之前花費相當?shù)臅r間量在網(wǎng)頁上時這個圖4實施例是適當?shù)?。例如,在上面背景部分描述的實施例中,兩個用戶訪問倉庫服務器上相同的產品X的庫存數(shù)據(jù)庫,如果倉庫知道用戶在數(shù)據(jù)庫內花費大約3或4分鐘以訪問庫存記錄并且進行購買,倉庫服務器可以以大約3分鐘設置X7節(jié)拍,以1分鐘設置X8節(jié)拍,以40秒鐘設置X9節(jié)拍等等,精確地縮小范圍到在大約3到4分鐘內的用戶實際上離開數(shù)據(jù)庫的時間。圖5說明服務器12結構的示范實施例。同樣,網(wǎng)頁請求和節(jié)拍信號以時間順序從頂端到底部在圖5的左邊示出。當接收到來自客戶機的網(wǎng)頁請求時,服務器12在處理器20中接收網(wǎng)頁請求,該處理器20隨后訪問數(shù)據(jù)庫16以找出或編輯網(wǎng)頁。在這樣做以后,處理器20在“網(wǎng)頁返回”傳輸中將網(wǎng)頁發(fā)送給客戶機。如前面描述的,這個網(wǎng)頁包括底稿編制語言函數(shù),該函數(shù)將在預定的間隔上產生節(jié)拍信號。如圖5所示,第一個節(jié)拍“節(jié)拍no.1”在第一個間隔之后返回。這個節(jié)拍由處理器20接收,該處理器將節(jié)拍信號記錄在日志14中。接著,處理器20訪問CGI過程21(如后面描述的,它在節(jié)拍no.1信號中被參照),該過程21通知處理器20發(fā)送“OK”信號返回給服務器。以后,服務器12的用戶可以經(jīng)過遠端計算機22訪問處理器20以便訪問日志14來消除網(wǎng)頁請求和隨后的節(jié)拍信息。由此,計算機22可以編輯用于統(tǒng)計目的的持續(xù)時間信息。當服務器用戶經(jīng)過計算機22訪問日志14時,根據(jù)本發(fā)明的示范實施例,它將可以看到類似于圖6所示的訪問日志14。圖6的例子類似于圖2所示的通信序列,其中節(jié)拍頻率(X1,X2,X3等等)是一致的持續(xù)時間。如下面更詳細描述的,圖6的訪問日志14中標識的信息告訴服務器的用戶,一個特定的客戶機訪問一個特定的網(wǎng)頁,隨后觀看它大于9分鐘,但是少于10分鐘。這可以通過觀看圖6的訪問日志14所示的每一行確定。在第一行,處理器20將來自一個標識為“pc59”的客戶機對于一個題目為“index.html”的網(wǎng)頁的網(wǎng)頁請求記錄在訪問日志中。這個網(wǎng)頁請求發(fā)生在1996年10月9日16∶51∶56。圖6的訪問日志14的第一行是如在命令“GET”中標識的網(wǎng)頁請求。在“GET”請求行之后,圖6的下面五行分別是網(wǎng)頁返回到服務器的五個節(jié)拍。如從這些行所看到的,在同一天(1996年10月9日)節(jié)拍從相同的PC“pc59”返回。在網(wǎng)頁請求之后5分鐘心動節(jié)拍開始(參照圖2,X0等于5分鐘),以后每分鐘產生節(jié)拍(參照圖2,X1=X2=X3=1分鐘)。這樣,對于這個網(wǎng)頁(index.html),底稿被告知在發(fā)送第一個節(jié)拍之前等待5分鐘。以后,底稿每分鐘發(fā)送一個節(jié)拍返回到服務器。從圖6所示的信息,我們可以確定pc59用戶在16∶51∶56接收index.html網(wǎng)頁并且呆在那里直到至少17∶00∶56,但不到17∶01∶56。我們知道這是因為被排定為在第一個以后每分鐘發(fā)生的節(jié)拍在17∶00∶56結束。當然,圖6的訪問日志例子只是可以使用的一種節(jié)拍序列類型的示范。如果某人想以比圖6所示節(jié)拍提供的更細的量化度知道是否一個客戶機用戶已經(jīng)停留在一個網(wǎng)頁上,則可以容易地修改底稿來產生節(jié)拍,例如每10秒鐘而不是每分鐘產生節(jié)拍。同樣,初始的節(jié)拍(它在圖6例子的網(wǎng)頁請求之后5分鐘發(fā)生)也可以改變(例如改為1分鐘)。本發(fā)明沒有以任何方式限制節(jié)拍間隔構成或時間。在本發(fā)明內也可以產生和設想其他類型的節(jié)拍底稿。例如,底稿可以基于時鐘時間(例如,準點的每小時),或基于特別算法(例如,圖4所示的Xn=2Xn+1)提供節(jié)拍。另一種類型的設想的底稿可以在一個特定的時間(例如,下午2∶00)產生一個單個節(jié)拍以確定一個預定在下午2∶00出現(xiàn)在網(wǎng)頁上的用戶在規(guī)定的時間是否實際上在那里??梢栽O想許多其他類型的節(jié)拍底稿,本發(fā)明不限制于任何特定類型的節(jié)拍序列。圖7說明了根據(jù)本發(fā)明可以使用的一種示范類型的底稿。當然,本發(fā)明不限制于圖7描述的特定底稿,而是擴展到本說明書和權利要求書中描述的目的和功能內設想的任何其他類型的底稿。在圖7的例子中,更詳細地示出例如圖5的服務器12。圖5實施例和圖7實施例之間的一個不同是數(shù)據(jù)存儲器的不同。在圖5中,服務器12訪問數(shù)據(jù)庫16,從該數(shù)據(jù)庫獲得數(shù)據(jù)來編輯一個網(wǎng)頁。另一方面,在圖7中,服務器12的處理器20從文件服務器和文件目錄17訪問網(wǎng)頁。這些和其他的實施例是在本發(fā)明內設想的,提供的服務器12可以發(fā)現(xiàn)和準備網(wǎng)頁以便傳輸?shù)娇蛻魴C。在圖7的例子中,一個客戶機(未示出)從服務器12請求一個題目為“index.html”的網(wǎng)頁。在index.html網(wǎng)頁中,除了將提供顯示給客戶機用戶的網(wǎng)頁信息的網(wǎng)頁數(shù)據(jù)以外,還包括在index.html網(wǎng)頁的第1-10行中所示的底稿函數(shù)。如圖7所示,在index.HTML網(wǎng)頁上的示范底稿函數(shù)如下1.<SCRIPTLANGUAGE=“Java底稿”>2.functionbeat(){3.setTimeout(“beat()”,60000);4.document.beatform.submit();5.}6.</SCRIPT>7.<bodyonLoad=‘setTimeout(“beat()”,300000)’>8.<formname=“beatform”method=POSTaction=“/cgi-bin/nph-beat”>9.<inputtype=hiddenname=whoamivalue=“index”>10.</form>如上所述,根據(jù)圖2-6的示范實施例,底稿函數(shù)將從客戶機提供節(jié)拍信號到服務器12。在底稿中,特定的行完成下面的功能第1行規(guī)定底稿以公知的javascript格式編寫。當然,其他的底稿語言也是公知的并且可以使用,另一個例子將在下面描述。第2行定義一個題目為“節(jié)拍(beat)”的函數(shù)。第3行請求定義的節(jié)拍函數(shù)每60000毫秒(60秒)被調用一次。第4行是一個指令,發(fā)送題目為“節(jié)拍表格(beatform)”的表格到服務器12。第5行結束函數(shù)定義。第6行結束javascript部分。第7行在檢索index.HTML網(wǎng)頁之后運行題目為“節(jié)拍”的函數(shù)300000毫秒(5分鐘)。這將建立第一次節(jié)拍(圖2中的K0)。第8行定義一個提交給服務器的表格。在表格被提交時,它將在服務器12上運行一個題目為“nph一節(jié)拍(nph-beat)”的程序。第9行規(guī)定該表格應該至少具有一個字段。第10行規(guī)定表格定義的結束。一旦客戶機接收到index.html網(wǎng)頁,該網(wǎng)頁在5分鐘持續(xù)時間之后將運行節(jié)拍函數(shù),該函數(shù)每60秒鐘發(fā)送“節(jié)拍表格”到服務器。當節(jié)拍表格被服務器12接收時,它將讀出表格中的動作(index.html底稿的第8行),向它指示應該運行“nph-節(jié)拍”底稿。處理器20調用CGI過程21(它可以是一個單獨的軟件部分或者可以集成在處理器20中),該過程運行如圖7所示的服務器CGI底稿。這個底稿可以為UNIX格式,但如以后描述的可能為另一種格式。如圖7所示,CGI服務器底稿是非常簡單的。CGI服務器底稿的第1行指示底稿在一個UNIX外殼程序中。第2行發(fā)送一個HTTP標題到請求index.html網(wǎng)頁的客戶機的瀏覽器。這個標題規(guī)定“沒有內容”意味著不需要瀏覽器采取任何動作。最后,CGI底稿的第3行在標題之后發(fā)送一個空白行。在圖7示出的示范底稿中,客戶機請求index.html網(wǎng)頁,網(wǎng)頁采用所示底稿到達,在接收網(wǎng)頁之后5分鐘時,網(wǎng)頁運行“節(jié)拍”函數(shù)。在運行“節(jié)拍”函數(shù)中,網(wǎng)頁每分鐘發(fā)送“節(jié)拍表格”文件到服務器12。這個文件告訴服務器尋找一個題目為“nph-節(jié)拍”的CGI過程。當服務器找到這個過程時,該過程將使得服務器12發(fā)出一個后面跟隨空白行的HTTP標題返回到客戶機。這個空白行實質上等效于圖2示出的“OK”語句,而由index.html網(wǎng)頁發(fā)送的“節(jié)拍表格”實質上等效于圖2所示的“我還在這里”的語句。一種等效于圖7示出的CGI底稿的C語言如下所示1.#include<stdio.h>2.main(){3.printf(“HTTP/1.0204NoContent/n/n”);4.}在上面的代碼中,第1行是C語言要求的;第2行定義了主程序;第3行發(fā)送一個HTTP標題到瀏覽器,規(guī)定不需要瀏覽器采取任何動作;以及第4行結束程序定義。重要的是注意在許多當前的萬維網(wǎng)服務器中,CGI底稿名字的名稱必須以“nph”開始以便它返回內容標題。上面的示范底稿對于圖7的示范實施例是適當?shù)模@里服務器12從例如文件目錄17檢索一個網(wǎng)頁。對于服務器12從如圖5所示的可以由客戶機修改的數(shù)據(jù)庫檢索信息的情況,底稿稍微更復雜一些。如上面背景部分描述的,相對于數(shù)據(jù)庫應用解決的問題不只是簡單地獲得統(tǒng)計信息,還包括確保兩個客戶機不同時訪問相同的數(shù)據(jù)庫條目。在數(shù)據(jù)庫應用的優(yōu)選實施例中,節(jié)拍將是穩(wěn)定的(即一致的周期性的)。另外,在網(wǎng)頁表格內從數(shù)據(jù)庫返回的字段也具有某種自標識能力(即每個返回的網(wǎng)頁應該具有一個唯一的標識字段),使得服務器12將知道客戶機用戶在哪里。在數(shù)據(jù)庫應用中,在CGI過程21中的服務器底稿必須設計用于特定的數(shù)據(jù)庫應用。特別地,底稿必須1)知道數(shù)據(jù)庫位于何處,以及2)知道如何控制特定數(shù)據(jù)庫內的字段。另外,對于數(shù)據(jù)庫應用,服務器返回的網(wǎng)頁必須由服務器動態(tài)地產生,意味著來自數(shù)據(jù)庫的字段被檢索并且隨后根據(jù)返回的數(shù)據(jù)庫信息創(chuàng)建網(wǎng)頁。理想地,網(wǎng)頁包括節(jié)拍底稿函數(shù),與包含一個適當標識字段的由節(jié)拍函數(shù)返回的一個表格(或文件)。在優(yōu)選實施例中,創(chuàng)建和接收網(wǎng)頁的服務器CGI底稿應該完成下面的功能1.如果一個網(wǎng)頁被某人使用,則拒絕發(fā)送該網(wǎng)頁給另一個用戶;2.以一個適當?shù)臉俗R字段標記節(jié)拍表格;3.如果需要,用數(shù)據(jù)庫信息填滿數(shù)據(jù)表格;以及4.如果節(jié)拍是“斷開的”,以及其他人也在其間參考該網(wǎng)頁,則拒絕接收返回的表格。圖8示出一個訪問服務器12上數(shù)據(jù)庫信息的客戶機用戶no.4的例子。首先,客戶機用戶做出網(wǎng)頁請求“給我網(wǎng)頁X”。這個請求被訪問數(shù)據(jù)庫16的處理器20接收。在圖8示出的例子中,網(wǎng)頁X可以是一個庫存記錄,該記錄請求一種特定產品的庫存數(shù)量“M”。在這種情況下,處理器20在命令“給我記錄‘M’使我能夠做出網(wǎng)頁X”中要求數(shù)據(jù)庫16來檢索記錄M。在數(shù)據(jù)庫16內,每個記錄包括一個日期/時間識別(DTI)記錄,該DTI記錄作為一個對于特定記錄的日志。DTI信息作為另一個字段記錄在數(shù)據(jù)庫中。這樣,當客戶機用戶no.4請求網(wǎng)頁X要求數(shù)據(jù)記錄M時,該用戶no.4對于記錄M的請求被記錄在數(shù)據(jù)庫16中用于記錄M的DTI字段中。DTI字段可以類似于圖6的訪問日志14中示出的條目,盡管為了簡便起見在圖8中使用一種簡寫表格。在圖8的例子中,初始的節(jié)拍和以后的每個節(jié)拍以一分鐘的間隔發(fā)生并且初始的網(wǎng)頁請求發(fā)生在時間15∶36。因此,記錄M具有一個相關的DTI字段,該字段帶有第一個訪問記錄條目“userno.4at15∶36”,指示客戶機用戶no.4在15∶36請求一個要求記錄M的網(wǎng)頁。在處理器20請求記錄M以便做出網(wǎng)頁X之后,數(shù)據(jù)庫16將記錄M返回給處理器20,該處理器制做網(wǎng)頁X(一種表格),包括一個CGI底稿(在下面更詳細地描述)和記錄“M”信息。以后,網(wǎng)頁底稿編制函數(shù)將使得客戶機用戶no.4每分鐘發(fā)送節(jié)拍到服務器12,使它停留在該網(wǎng)頁上。這些節(jié)拍如語句“還在網(wǎng)頁X上”從圖8的頂端到底部以時間順序序列示出。如下面更詳細描述的,來自客戶機用戶no.4的節(jié)拍將向服務器12標識網(wǎng)頁信息。處理器20接收來自客戶機no.4的節(jié)拍,它使得處理器20調用CGI過程21。這個過程21是另一種底稿編制函數(shù),該函數(shù)使得服務器12以一個意思為“OK”的空白行來響應。另外,每個節(jié)拍被處理器20和CGI過程21接收時,通過登記節(jié)拍條目來修改數(shù)據(jù)庫16中用于記錄M的DTI字段。這樣,例如,數(shù)據(jù)庫16中的記錄M具有一個(部分的)DTI字段,指示用戶no.4從15∶36(以后是每分鐘)到至少15∶39停留在網(wǎng)頁X上(可能還取決于客戶機用戶no.4通過停留在網(wǎng)頁上而繼續(xù)發(fā)送節(jié)拍到服務器12多長時間)。最后,客戶機用戶no.4可以發(fā)送一個請求到服務器12,實際上請求服務器12修改記錄“M”。例如,如果客戶機用戶no.4做出一個請求購買產品庫存“M”中某一數(shù)量的特定產品,這種情況可能發(fā)生??蛻魴C用戶no.4通過返回一個指示對記錄M修改的表格來做到這一點。這個表格由處理器20接收,處理器20通知數(shù)據(jù)庫16該記錄M要被修改。因此數(shù)據(jù)庫16修改記錄M。以后,客戶機用戶no.4離開網(wǎng)頁X,使得節(jié)拍停止。這通知服務器12現(xiàn)在記錄M可以由另一個客戶機用戶得到。圖9更詳細地示出這種情況,這里客戶機no.1請求網(wǎng)頁4,接收網(wǎng)頁4,然后發(fā)送1個(或多個)節(jié)拍到服務器12,指示它停留在網(wǎng)頁上多長時間。在某一點,客戶機no.1將離開網(wǎng)頁4,結果是在客戶機no.1和服務器12之間一片沉靜,告訴服務器12該客戶機no.1已經(jīng)離開網(wǎng)頁。然后,客戶機no.2可以在請求“c”中請求網(wǎng)頁no.4。如圖9中示為通信“D”的來自服務器12的響應將取決于底稿函數(shù)和客戶機no.1接收的最后節(jié)拍和客戶機no.2請求網(wǎng)頁4之間的時間Tc。下面更詳細地描述對于從服務器12到客戶機no.2的響應“D”的各種可能的例子。首先,下面對于一個將顯示來自表格“T”的數(shù)據(jù)的網(wǎng)頁示出一個示范網(wǎng)頁底稿。這個網(wǎng)頁由服務器CGI底稿創(chuàng)建,該底稿得到從表格“T”讀出的請求的記錄數(shù)量“M”,允許用戶修改該記錄。當用戶將該記錄返回給底稿時,該記錄被重新寫入數(shù)據(jù)庫并且在它的位置檢索下一個記錄(M+1)。這個例子僅是本發(fā)明的一種簡單的實現(xiàn)方式但不是對本發(fā)明的限制1.<html>2.<head>3.<METAHTTP-EQUIV=“Expires”CONTENT=“Thu,01Dec199416∶00∶00GMT”>4.<scriptlanguage=“JavaScript”>5.functionbeat(){6.setTimeout(“beat()”,60000);7.document.beatform.submit();8.}9.</script>10.<title>RecordmFromTableT</title>11.</head>12.<bodyonLoad=“beat()”>13.<formname=“beatform”method=POSTaction=“/cgi-bin/nph-dbbeat”>14.<inputtype=hiddenname=“whoAmI”value=“T/m”>15.</form>16.[introductorytextwouldgohere]17.<formname=“dataform”method=POSTaction=“/cgi-bin/dbupdate”>18.<inputtype=hiddenname=“whoAmI”value=“T/m”>19.[datefields,filledwithinformationfromtableTrecordmgohere]20.</form>21.[“footer”textwouldgohere]22.</body>23.</html>如第4行說明的,這個示范底稿以javascript格式寫出,但是其他的格式也是可能的。對于某些相關底稿行的解釋如下第3行迫使網(wǎng)頁從服務器重新加載。這對應于一個可能的問題,某人工作在一個網(wǎng)頁,隨后跳到另一個網(wǎng)頁,然后返回到第一個網(wǎng)頁。如果第一個網(wǎng)頁是最近的,瀏覽器可能試圖從一個超高速緩沖存儲器提取網(wǎng)頁,這里根據(jù)人們經(jīng)常返回到相同網(wǎng)頁的假設來保留最近的網(wǎng)頁。如果從超高速緩沖存儲器中獲得網(wǎng)頁,節(jié)拍函數(shù)將再次開始,即使其他人可能在其間檢索該網(wǎng)頁。稱為“DBUPDATE”的CGI底稿將通過拒絕保存網(wǎng)頁而不準許這種情況出現(xiàn)。代之以,將消息返回用戶,告訴用戶不再擁有它。作為額外的預防措施,每個產生的網(wǎng)頁被給予一個期滿長度,該長度使得在它可以被下載之前它已經(jīng)期滿。期滿的網(wǎng)頁不被高速緩存??梢允褂闷渌奶娲夹g來防止網(wǎng)頁被高速緩存以解決這個問題。第5行是節(jié)拍函數(shù),每60秒鐘提交“節(jié)拍表格(beatform)”。第10行是返回的表信息例如“來自工資表的關于Mike的信息”,或這類其他有用信息的題目。第12行在加載網(wǎng)頁時開始節(jié)拍。第13行在每完成一個節(jié)拍時運行CGI底稿“nph-dbbeat”。隨后通過一個具有規(guī)定了記錄和表的值的稱為“我是誰(whoAmI)”的字段。第16行是一個文本,描述用戶看什么,或者可能是一個公司標志。第17行是另一個包含所有用于記錄的相關數(shù)據(jù)的表格。如果記錄是一個工資單記錄,它可以包括姓名、雇員標識、工資、稅信息等等。當完成時,該表格提交到“DBUPDATE”,該“DBUPDATE”保存信息并且返回一個具有記錄M+1的數(shù)據(jù)的新的網(wǎng)頁。借助于Javascript,可以創(chuàng)建一系列“提交”按鈕,它將返回例如第一個記錄、最后的記錄、先前的記錄、下一個記錄或者一個特定的記錄。當前的例子返回“下一個記錄”。第18行是包括在表格中的“whoAmI”字段。第21行關閉文本,也許是鏈接組合的網(wǎng)頁、幫助網(wǎng)頁等等。第22行結束網(wǎng)頁主體。第23行結束網(wǎng)頁。根據(jù)這個例子,需要兩個CGI底稿與文件一起工作一個CGI底稿控制節(jié)拍,一個更新和發(fā)送來自數(shù)據(jù)庫的網(wǎng)頁。如圖8所示,節(jié)拍底稿必須將一個日期/時間/識別(DTI)標記放到規(guī)定的位置。DTI標記可以重寫先前的DTI標記,或者可以登記它們。如果DTI標記被允許重寫,允許重寫條件的準則可以包括1.提交DTI的計算機是先前規(guī)定它的計算機;或者2.當前的日期/時間是先前DTI標記的“超時”周期以外的。下面參照在可讀性上有幫助的標準C語言函數(shù),以偽碼示出用于節(jié)拍函數(shù)的一個示范CGI底稿1.識別經(jīng)過getenv(“REMOTE_ADDR”)發(fā)送請求的計算機。將其保存作為“ipAddress”。2.得到“whoAmI”參數(shù)的值。可以使用標準CGI實用工具來完成這一點。將其保存為“whoAmI”。3.打開一個由“whoAmI”的值命名的文件用于讀出。4.如果這個文件存在5.讀出內容。保存ip地址作為“l(fā)astIP”以及日期/時間作為“l(fā)astDT”。6.如果lastIP與whoAmI相同,或者如果(現(xiàn)在時間)-lastDT大于超時周期,則7.重新打開文件用于寫入。8.插入whoAmI和當前的日期/時間。9.否則,這個人正在試圖偷取另外某人的“心動節(jié)拍”。不理睬他。10.否則,文件不存在11.打開文件用于寫入。12.插入whoAmI和當前的日期/時間。13.關閉文件。14.寫“HTTP/1.0204NoContent\n\n”到stdout,通知客戶機該底稿已經(jīng)被處理。15.結束底稿。需用于上面例子的第二個底稿是更新和發(fā)送來自數(shù)據(jù)庫的網(wǎng)頁的那一個。在例子中,這被稱為“DBUPDATE”底稿,下面參照在可讀性上有幫助的標準C語言函數(shù),以偽碼示出它的一個例子1.識別經(jīng)過getenv(“REMOTE_ADDR”)發(fā)送請求的計算機。將其保存為“ipAddress”。2.得到“whoAmI”參數(shù)的值??梢允褂脴藴蔆GI實用工具來完成這一點。將其保存為“whoAmI”。3.打開一個由“whoAmI”的值命名的文件用于讀出。4.如果這個文件存在5.讀出內容。保存op地址作為“l(fā)astIP”以及日期/時間作為“l(fā)astDT”。6.如果lastIP與whoAmI相同,或者如果(現(xiàn)在時間)-lastDT大于超時周期,則7.重新打開文件用于寫入。8.插入whoAmI和當前的日期/時間。9.否則,這個人正在試圖偷取另外某人的“心動節(jié)拍”。不理睬他。10.否則,文件不存在11.更新當前的數(shù)據(jù)庫記錄。12.制做一個具有標題“記錄<m>已經(jīng)被成功地更新”和用于下一個記錄(如果有的話)數(shù)據(jù)的網(wǎng)頁。13.關閉文件。14.結束底稿。使用上面的示范底稿,在圖9的實施例中,描述了從服務器12到客戶機1和2的響應的例子,這里每個客戶機希望從服務器12接收相同的信息。在這個例子中,假定客戶機no.1已經(jīng)請求工資單信息,使得whoAmI文件包含“payroll(工資單)/mikesmith”。“remoteaddr”變量(它包含請求計算機的IP地址)當前包含客戶機no.1的IP地址。當客戶機no.1做出對于網(wǎng)頁的請求時,可能存在5種可能的響應條件??赡苄詎o.1。服務器12發(fā)現(xiàn)文件“payroll/mikesmith”存在并且它包含客戶機no.1的IP地址,DTI標記時間在大約1分鐘以前。這是正常的情況并且指示服務器12,客戶機no.1繼續(xù)使用文件“payroll/mikesmith”以及節(jié)拍函數(shù)在網(wǎng)頁上重新要求客戶機no.1的控制。可能性no.2。如果服務器12在接收來自客戶機no.1的網(wǎng)頁請求之后,發(fā)現(xiàn)文件“payroll/mikesmith”存在并且包含客戶機no.1的IP地址,但這個文件的DTI標記在大約1小時以前,服務器12將這一點視為非正常的情況。在這種情況下,客戶機no.1過去觀看網(wǎng)頁然后離開(因此缺少更近似的DTI標記時間)并且現(xiàn)在又返回到網(wǎng)頁。已經(jīng)從超高速緩沖存儲器恢復網(wǎng)頁(它不應該是正常發(fā)生的,因為每個網(wǎng)頁應該在這個情況能夠產生之前期滿)。從超高速緩沖存儲器恢復文件后,作為網(wǎng)頁以前的所有者的客戶機no.1現(xiàn)在可以重新要求網(wǎng)頁控制??赡苄詎o.3。如果服務器發(fā)現(xiàn)文件“payroll/mikesmith”不存在,則錯誤條件已經(jīng)產生。無法讓文件不存在,因為發(fā)送網(wǎng)頁的CGI創(chuàng)建了文件。然而,如果假設成立,底稿能夠容易地從這個錯誤恢復。如果文件被以某種方式刪除,它被重新創(chuàng)建,客戶機no.1變?yōu)樵摼W(wǎng)頁的所有者。如果另一個客戶機擁有該網(wǎng)頁,它被重新分配使得其他的所有者失去網(wǎng)頁的控制。注意這是一種非正常情況,要求文件在節(jié)拍時間周期內被另一個所有者以某種方式丟失和劫持,它很可能不會發(fā)生。然而,上面的重新創(chuàng)建和重新分配可能注意這種錯誤條件??赡苄詎o.4。如果根據(jù)來自客戶機no.1的網(wǎng)頁請求,服務器12發(fā)現(xiàn)文件“payroll/mikesmith”存在并且包含客戶機no.2的IP地址,DTI標記時間是大約1分鐘之前,服務器12將通知客戶機no.1,它不再是網(wǎng)頁的所有者并且必須等待到客戶機no.2完成該網(wǎng)頁它才能夠訪問。這種可能性發(fā)生在客戶機no.1訪問網(wǎng)頁,完成該網(wǎng)頁,隨后試圖從超高速緩沖存儲器恢復該網(wǎng)頁時,此時客戶機no.2已經(jīng)獲得該網(wǎng)頁。因為客戶機no.1的節(jié)拍結束,客戶機no.2訪問該網(wǎng)頁,現(xiàn)在客戶機no.1不能從超高速緩沖存儲器恢復,直到客戶機no.2完成為止。可能性no.5。最后的可能性發(fā)生在服務器12識別出文件“payroll/mikesmith”存在,并且它包含客戶機no.2的IP地址以及時間在大約1小時以前時。這種情況也是非正常的,因為網(wǎng)頁來自超高速緩沖存儲器并且應該在以小時為單位的長間隔之前期滿。很可能客戶機no.2已經(jīng)交出網(wǎng)頁,使得客戶機no.1現(xiàn)在能夠重新要求對它的權利。這里有一個問題必須解決??蛻魴Cno.1可能在它的網(wǎng)頁上有舊的數(shù)據(jù)并且客戶機no.1可能結束重寫客戶機no.2的較新的數(shù)據(jù)。這是網(wǎng)頁不應被高速緩存的主要原因。對于真正不利的鎖定,服務器12應該警告用戶no.1,它可能正在使用舊的數(shù)據(jù)并且應該以刷新數(shù)據(jù)重新進行工作。以這種方式,當客戶機正在使用網(wǎng)上數(shù)據(jù)時數(shù)據(jù)庫中的數(shù)據(jù)可能被鎖定。僅當服務器12上的CGIDBUPDATE底稿來自鎖定網(wǎng)頁的客戶機時,可以使用它以將數(shù)據(jù)寫入數(shù)據(jù)庫。CGI底稿隨后將發(fā)送下一個記錄到相同的客戶機。該底稿也處理提交網(wǎng)頁的客戶機與鎖定它的客戶機不相同的情況,然而,在理想的情況下,這種情況不應該發(fā)生。如果網(wǎng)頁沒有被高速緩存并且服務器12只發(fā)送鎖定的網(wǎng)頁,第二個客戶機不能重疊第一個客戶機來檢索鎖定的網(wǎng)頁。然而,為了魯棒性起見,上面使用的底稿例子包括5種可能性(假設高速緩沖可能發(fā)生)的每一種,使得服務器12不會掛起。研究了上面的描述,能夠看出本發(fā)明為HTTP通信提供對話控制,即使Web協(xié)議將對話定義為單獨的一個網(wǎng)頁請求和一個網(wǎng)頁響應。通過本發(fā)明,服務器能夠確定一個客戶機觀看網(wǎng)頁多長時間并且當某些客戶機已經(jīng)訪問相同的數(shù)據(jù)庫條目時能夠將其它客戶機鎖定在包含數(shù)據(jù)庫信息的網(wǎng)頁之外。盡管結合當前最實際的和優(yōu)選的實施例描述了本發(fā)明,應該理解本發(fā)明不限制于公開的實施例,而是相反,它包括了在附加權利要求書的精神和范圍內的各種修改和等效的配置。權利要求1.一個為網(wǎng)絡上客戶機提供訪問而連接的網(wǎng)絡服務器,客戶機根據(jù)將對話定義為一個對話請求和一個對話響應的對話協(xié)議訪問網(wǎng)絡服務器,網(wǎng)絡服務器包括一個用于存儲網(wǎng)頁信息的存儲器;以及一個網(wǎng)頁編輯器,用于接收來自請求客戶機的網(wǎng)頁請求,使用某些存儲的網(wǎng)頁信息根據(jù)請求來創(chuàng)建一個網(wǎng)頁;將網(wǎng)頁底稿函數(shù)連接到創(chuàng)建的網(wǎng)頁,并且經(jīng)過網(wǎng)絡將具有網(wǎng)頁底稿函數(shù)的創(chuàng)建的網(wǎng)頁發(fā)送到請求的客戶機,其中底稿函數(shù)以預分配的節(jié)拍創(chuàng)建從請求的客戶機發(fā)送到服務器的另外的網(wǎng)頁請求。2.如權利要求1所述的網(wǎng)絡服務器,其中只有當請求的客戶機使用創(chuàng)建的網(wǎng)頁時,底稿函數(shù)創(chuàng)建另外的網(wǎng)頁請求。3.如權利要求1所述的網(wǎng)絡服務器,其中只有當請求的客戶機繼續(xù)使用創(chuàng)建的網(wǎng)頁時,底稿函數(shù)創(chuàng)建另外的網(wǎng)頁請求。4.如權利要求1所述的網(wǎng)絡服務器,其中網(wǎng)頁編輯器還包括一個底稿過程用于產生從服務器發(fā)送到請求的客戶機的應答消息,并且其中另外的網(wǎng)頁請求包括請求服務器運行底稿過程并且因此每次服務器接收到另外的網(wǎng)頁請求時就產生和發(fā)送應答消息。5.如權利要求4所述的網(wǎng)絡服務器,其中應答消息是一個空消息。6.如權利要求1所述的網(wǎng)絡服務器,還包括一個訪問日志用于記錄所有接收的網(wǎng)頁請求。7.如權利要求6所述的網(wǎng)絡服務器,其中訪問日志保持一個何時所有的網(wǎng)頁請求被接收的記錄,并且網(wǎng)絡服務器還包括一個分析訪問日志的處理器,以根據(jù)記錄確定是否一個請求的客戶機正在繼續(xù)使用一個請求的網(wǎng)頁。8.如權利要求1所述的網(wǎng)絡服務器,其中存儲器包括一個文件目錄。9.如權利要求8所述的網(wǎng)絡服務器,其中網(wǎng)頁信息包括網(wǎng)頁文件。10.如權利要求1所述的網(wǎng)絡服務器,其中存儲器包括一個數(shù)據(jù)庫。11.如權利要求10所述的網(wǎng)絡服務器,其中網(wǎng)頁信息包括可以由請求的客戶機在數(shù)據(jù)庫中檢索和改變的數(shù)據(jù)點。12.如權利要求11所述的網(wǎng)絡服務器,其中數(shù)據(jù)庫包括所述數(shù)據(jù)點的日期和時間字段,每個所述日期和時間字段包括標識哪個請求的客戶機最后訪問一個相應的數(shù)據(jù)點和何時所述最后的訪問發(fā)生的信息。13.如權利要求11所述的網(wǎng)絡服務器,其中數(shù)據(jù)庫包括所述數(shù)據(jù)點的日期和時間字段,每個日期和時間字段包括標識最近訪問一個相應的數(shù)據(jù)點的至少一個請求的客戶機和何時所述至少一個請求的客戶機的所述最后訪問發(fā)生的信息。14.如權利要求1所述的網(wǎng)絡服務器,其中預分配節(jié)拍是周期性的。15.如權利要求1所述的網(wǎng)絡服務器,其中預分配節(jié)拍是線性的。16.如權利要求1所述的網(wǎng)絡服務器,其中預分配節(jié)拍是不規(guī)則的。17.一種使用定義每個對話為一個對話請求和一個對話響應的對話協(xié)議在客戶機和服務器的網(wǎng)絡上創(chuàng)建一個用于傳輸?shù)木W(wǎng)頁的方法,包括接收來自請求的客戶機的網(wǎng)頁請求;檢索網(wǎng)頁信息以制做一個請求的網(wǎng)頁;將網(wǎng)頁信息編輯到請求的網(wǎng)頁中;將一個網(wǎng)頁底稿函數(shù)連接到請求的網(wǎng)頁上,網(wǎng)頁底稿函數(shù)使得另外的網(wǎng)頁請求以預分配的節(jié)拍從請求的客戶機發(fā)送;以及經(jīng)過網(wǎng)絡將具有網(wǎng)頁底稿函數(shù)的網(wǎng)頁發(fā)送到請求的客戶機。18.如權利要求17所述的方法,其中檢索步驟包括對于至少某些網(wǎng)頁信息訪問一個文件目錄的步驟。19.如權利要求17所述的方法,其中檢索步驟包括對于至少某些網(wǎng)頁信息訪問一個數(shù)據(jù)庫的步驟。20.如權利要求17所述的方法,還包括步驟將其他請求的客戶機鎖定在請求的網(wǎng)頁以外直到網(wǎng)頁底稿函數(shù)不再以預分配節(jié)拍中發(fā)送另外的網(wǎng)頁請求為止。全文摘要公開了一種在如互聯(lián)網(wǎng)絡的網(wǎng)絡上提供對話控制的方法。傳統(tǒng)地,互聯(lián)網(wǎng)絡協(xié)議定義一個客戶機和一個服務器之間的對話為一個網(wǎng)頁請求和一個網(wǎng)頁響應。這不允許服務器確定一個客戶機訪問一個網(wǎng)頁多長時間或者是否一個包含數(shù)據(jù)庫信息的網(wǎng)頁被兩個客戶機同時觀看。根據(jù)本發(fā)明,網(wǎng)頁包含一個底稿,該底稿使得網(wǎng)頁在特定的時間從客戶機發(fā)送節(jié)拍信號到服務器以指示服務器,該客戶機正在繼續(xù)觀看網(wǎng)頁。當客戶機釋放該網(wǎng)頁時,節(jié)拍將停止,服務器將知道客戶機已經(jīng)釋放了網(wǎng)頁。文檔編號H04L29/06GK1283356SQ9881262公開日2001年2月7日申請日期1998年12月23日優(yōu)先權日1997年12月23日發(fā)明者菲爾·費特申請人:英國電訊有限公司