亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

使用具有同步頻率的時鐘的可靠的消息通信的制作方法

文檔序號:7625965閱讀:223來源:國知局
專利名稱:使用具有同步頻率的時鐘的可靠的消息通信的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及電子消息通信,并且由其涉及使用具有同步頻率的時鐘的可靠消息通信。
背景技術(shù)
計算機系統(tǒng)和有關(guān)技術(shù)影響社會的許多方面。的確,計算機系統(tǒng)處理信息的能力已經(jīng)改變了我們生活和工作的方式。計算機系統(tǒng)如今一般執(zhí)行許多在計算機系統(tǒng)出現(xiàn)之前是手動執(zhí)行的任務(wù)(例如,文字處理、計劃安排、和數(shù)據(jù)庫管理)。近年來計算機系統(tǒng)已被彼此耦合并耦合到其它電子設(shè)備以構(gòu)成各種有線和無線計算機網(wǎng)絡(luò),通過這些網(wǎng)絡(luò),計算機系統(tǒng)和其它電子設(shè)備可傳遞電子數(shù)據(jù)。結(jié)果,許多在一個計算機系統(tǒng)中執(zhí)行的任務(wù)(例如,語音通信、存取電子郵件、控制家用電器、網(wǎng)絡(luò)瀏覽、和打印文檔)包括了許多計算機系統(tǒng)和/或其它電子設(shè)備經(jīng)由有線和/或無線計算機網(wǎng)絡(luò)的電子消息的交換。
網(wǎng)絡(luò)實際上已經(jīng)如此普及,以至于一簡單的網(wǎng)絡(luò)使能的計算系統(tǒng)可通過通常稱為“因特網(wǎng)”的各種網(wǎng)絡(luò)的聚集,與遍布全球的數(shù)以百萬的其它計算系統(tǒng)中的任何一個通信。此類計算系統(tǒng)可包括臺式計算機、膝上計算機、或平板式個人計算機;個人數(shù)字助理(PDA);電話;或能夠通過數(shù)字網(wǎng)絡(luò)通信的任何其它計算機或設(shè)備。
為了通過網(wǎng)絡(luò)通信,一個計算設(shè)備(本文中稱為“發(fā)送計算設(shè)備”)構(gòu)造或者存取一個電子消息,并將該電子消息通過網(wǎng)絡(luò)發(fā)送到另一個計算系統(tǒng)(本文中稱為“接收計算設(shè)備”)。當該電子消息是電子郵件或即時消息時,該電子消息可由人類用戶閱讀,或相反,可由在接收計算設(shè)備上運行的某個應(yīng)用程序閱讀。電子消息可在人類用戶可能的協(xié)助下,由發(fā)送計算系統(tǒng)上運行的某個應(yīng)用程序構(gòu)造。
盡管此類電子消息通信有利地允許計算系統(tǒng)交換信息,然而網(wǎng)絡(luò)有時未能傳送電子消息。取決于電子消息的重要程度,這可能是十分有害的,在某些情況下甚至可能是災(zāi)難性的。因此,一些可靠的電子消息通信技術(shù)已經(jīng)被開發(fā)出來。
一般而言,可靠的消息通信技術(shù)是要將電子消息從源通過可松弛、復(fù)制、重排和延遲消息的通信網(wǎng)絡(luò)傳送到目的地。某些電子消息可被多次傳送和處理而不會產(chǎn)生危害。然而,這并不適用于所有消息。一般而言,最安全的方式是確保消息被發(fā)送一次或一次也不被發(fā)送。
某些可靠的消息通信技術(shù)實行確認消息。例如,傳輸控制協(xié)議(及其它傳輸協(xié)議)實行基于確認的可靠消息通信。具體地,當接收計算系統(tǒng)從發(fā)送計算系統(tǒng)收到一個電子消息,接收計算系統(tǒng)向發(fā)送計算系統(tǒng)發(fā)出一個確認消息。一收到該確認消息,發(fā)送計算系統(tǒng)可以在確知接收計算系統(tǒng)的確收到了該電子消息的前提下采取適當?shù)男袆印7駝t,如果發(fā)送計算系統(tǒng)沒有收到確認消息,發(fā)送計算系統(tǒng)可采取諸如重新發(fā)送該電子消息等適當?shù)男袆?。但是為每個收到的電子消息發(fā)送確認信息可能導(dǎo)致會潛在地并且不必要地消耗網(wǎng)絡(luò)帶寬的大量確認消息。
為了減少需要發(fā)送的確認消息的個數(shù),開發(fā)出了累積確認。在累積確認中,發(fā)送計算系統(tǒng)向會話中的每個電子消息分配一個序列號。某給定電子消息的序列號通常與該會話中前一個電子消息相比增加了1。返回給發(fā)送計算系統(tǒng)的累積確認包括表示成功收到的消息的一連串相連序列號的最后一個序列號。例如,假設(shè)接收計算系統(tǒng)收到具有序列號1到50、和55到99的電子消息,但沒有收到具有序列號51-54的消息。接收計算系統(tǒng)可返回僅標識收到的序列的累積確認。
但是,當發(fā)送計算系統(tǒng)未能收到確認消息(單獨的或累積的)時,發(fā)送計算系統(tǒng)可能就沒有辦法判斷是電子消息傳送失敗,還使對應(yīng)的確認消息傳送失敗。即,發(fā)送計算系統(tǒng)對于接收計算系統(tǒng)是否收到電子消息是存疑的。在某些環(huán)境中,多次傳送和處理電子消息可能是可接收的。因此,在這些環(huán)境中(例如,涉及基于靜態(tài)Web的內(nèi)容),當沒有收到對應(yīng)的確認消息時,發(fā)送計算系統(tǒng)可重新發(fā)送電子消息。但是,在其它環(huán)境中,多次傳送和/或處理電子消息可能是不可接收的。因此,在這些其它環(huán)境中(例如,涉及銀行交易),當沒有收到對應(yīng)的確認消息時,發(fā)送計算機系統(tǒng)不會重新發(fā)送電子消息。
為使發(fā)送計算設(shè)備免于必需作出可能不正確的重新發(fā)送的決定,設(shè)計出了重復(fù)檢測機制。重復(fù)檢測機制降低了接收計算系統(tǒng)處理同一個消息(或同一消息序列)一次以上的可能性。為了實現(xiàn)重復(fù)檢測機制,許多接收計算機系統(tǒng)存儲與發(fā)送計算機系統(tǒng)相關(guān)聯(lián)的狀態(tài)信息。例如,接收計算機系統(tǒng)可存儲一個所有先前被處理過(由發(fā)送計算系統(tǒng)的IP地址和序列號標識)的先前的消息(或消息序列)的指示(例如,在數(shù)據(jù)庫或列表中)。因此,如果某個收到的消息在該列表中出現(xiàn)(即,先前已收到過該消息),則棄置收到的消息,避免了重復(fù)處理該消息。接收計算系統(tǒng)通常將狀態(tài)信息諸如會話的長度等存儲很長的時間(可能永遠)以顯著提高重復(fù)檢測的機會。
由于計算系統(tǒng)的數(shù)量和網(wǎng)絡(luò)上(例如,因特網(wǎng)上)交換的消息數(shù)量,實現(xiàn)重復(fù)檢測所需的資源可能相當大。例如,在因特網(wǎng)上的任何給定時間,數(shù)以百萬計的計算機系統(tǒng)正在交換電子消息。即使在單個接收計算機系統(tǒng)處(例如,零售服務(wù)器),在給定的某一天與數(shù)以千計、或甚至數(shù)以萬計的不同發(fā)送計算系統(tǒng)交互也是不罕見的。因此,為了實現(xiàn)重復(fù)檢測,這些接收計算系統(tǒng)可長期存儲從每個發(fā)送計算機系統(tǒng)收到的每個消息的指示。因為每個發(fā)送計算系統(tǒng)都可能發(fā)送數(shù)以千計的消息作為一次事務(wù)的一部分,接收計算系統(tǒng)可能需要為大量(例如,數(shù)百萬或數(shù)千萬個)消息維護狀態(tài)。
一些其它的可靠的消息通信技術(shù)利用同步到絕對時間的時鐘。但是,將時鐘同步到絕對時間要求同步協(xié)議和高連通性。在諸如因特網(wǎng)等某些網(wǎng)絡(luò)上,高連通性實際上是不可能的,因為計算機系統(tǒng)頻繁地連接到網(wǎng)絡(luò)或從網(wǎng)絡(luò)斷開。此外,利用具有絕對同步時間的時鐘的可靠的消息通信技術(shù)實現(xiàn)的成本可能更高。據(jù)此,更常使用維護狀態(tài)的可靠的消息通信技術(shù),并且在當不可能和絕對時鐘同步更嚴格的操作參數(shù)一致時常常是必需的。因此,許多聯(lián)網(wǎng)計算機系統(tǒng)必需分配可能相當大量的資源以維護涉及于其它計算機系統(tǒng)的通信的狀態(tài)。因而便于以資源更有效方式的可靠的消息通信的系統(tǒng)、方法和計算機程序產(chǎn)品將是有利的。

發(fā)明內(nèi)容
前述的現(xiàn)有技術(shù)的問題為本發(fā)明的原理所克服,本發(fā)明針對使用具有同步頻率的時鐘的可靠消息通信的方法、系統(tǒng)和計算機程序產(chǎn)品。在一些實施例中,消息目的地處理包括具有消息ID和存活時間(TTL)值的消息第一副本。消息目的地更新交互高速緩存以指示已經(jīng)處理過具有該消息ID的消息。消息目的地在處理了消息的第一副本之后,并且在基于TTL值的倒數(shù)計時器到期之前,收到消息的第二副本(也具有該消息ID)。消息目的地基于指示先前已經(jīng)處理過具有該消息ID的一個消息的交互高速緩存,拒收消息的第二副本。
在其它實施例中,消息目的地處理具有交互ID、消息ID和TTL值的消息的第一副本。響應(yīng)于最后一個基于在已處理消息中指定的TTL值的倒數(shù)計時器到期,消息目的地從其交互高速緩存中移除與交互ID相關(guān)聯(lián)的進度信息。消息目的地在倒數(shù)計時器到期之后收到消息的第二副本。消息目的地向具有與消息目的地的時鐘頻率同步的時鐘頻率的對應(yīng)消息源發(fā)送請求,要求交互ID的進度的指示。消息目的地收到交互已經(jīng)進展、從而具有該消息ID的消息可被棄置的指示。消息目的地棄置消息的第二副本。
在其它實施例中,消息目的地收到與一個在先的實例ID對應(yīng)的消息的第一副本。接著,消息目的地在初始化成具有該在先實例ID的消息處理器實例處處理消息的第一副本。消息目的地檢測到目的地計算機系統(tǒng)所利用的存儲器內(nèi)容有無意的丟失。消息目的地重新初始化消息處理器實例,使更新的實例ID與在先的實例ID不同。消息目的地在重新初始化消息處理器實例之后收到消息的第二副本,消息的第二副本對應(yīng)于在先的實例ID。消息目的地拒收消息的第二副本,因為消息的第二副本對應(yīng)于與更新的實例ID不同的實例ID。
在另外的實施例中,消息源向具有與消息源時鐘頻率同步的時鐘頻率的消息目的地發(fā)送具有交互ID、消息ID和TTL值的消息第一副本。消息源在發(fā)送消息的第一副本之后,向目標計算機系統(tǒng)發(fā)送具有交互ID、消息ID和更新TTL值的消息第二副本。更新TTL值是從消息的第一副本中指定的TTL值減去從消息的第一副本被發(fā)送起已過去的時間計算出來的。消息源檢測到消息TTL到期。消息源更新交互高速緩存以指示消息不再需要確認。
本發(fā)明的這些及其它對象和特征將會從以下描述和所附的權(quán)利要求書變得更加完全顯而易見,或可通過如下文所述地實施本發(fā)明來學(xué)會本發(fā)明。


為了進一步闡明本發(fā)明以上及其它優(yōu)點和特征,將參考附圖中示出的具體實施例來呈現(xiàn)對本發(fā)明更具體的描述。應(yīng)當理解這些附圖僅描述了若干本發(fā)明典型的實施例,因此不應(yīng)被視為限制本發(fā)明的范圍。將通過使用附圖更具體和詳細地描述和解釋本發(fā)明,其中圖1示出便于使用具有同步頻率時鐘的可靠的消息通信的計算機體系結(jié)構(gòu)的示例。
圖2示出便于在消息ID在消息目的地的交互高速緩存中維護時可靠地處理消息通信的第一個示例性消息流程。
圖3示出便于在消息ID從消息目的地的交互高速緩存中被刷新掉時可靠地處理消息通信的第二個示例性消息流程。
圖4示出便于在消息目的地遭受無意的存儲丟失時可靠地處理消息通信的第三個示例性消息流程。
圖5示出本發(fā)明的原理的合適的操作環(huán)境。
圖6示出一種使消息源能可靠地傳送消息的方法的示例性流程圖。
圖7示出一種使消息目的地能可靠地處理消息的方法的示例性流程圖。
具體實施例方式
前述的現(xiàn)有技術(shù)的問題為本發(fā)明的原理所克服,本發(fā)明針對使用具有同步頻率的時鐘的可靠的消息通信的方法、系統(tǒng)和計算機程序產(chǎn)品。在一些實施例中,消息目的地處理具有消息ID和存活時間(TTL)值的消息第一副本。消息目的地更新交互高速緩存以指示已經(jīng)處理過具有該消息ID的消息。消息目的地在處理了消息的第一副本之后,并且在基于TTL值的倒數(shù)計時器到期之前,收到消息的第二副本(也具有該消息ID)。消息目的地基于指示先前已經(jīng)處理過具有該消息ID的一個消息的交互高速緩存,拒收消息的第二副本。
在其它實施例中,消息目的地處理具有交互ID、消息ID和TTL值的消息的第一副本。響應(yīng)于最后一個基于在已處理消息中指定的TTL值的倒數(shù)計時器到期,消息目的地從其交互高速緩存中移除與交互ID相關(guān)聯(lián)的進度信息。消息目的地在倒數(shù)計時器到期之后收到消息的第二副本。消息目的地向具有與消息目的地的時鐘頻率同步的時鐘頻率的對應(yīng)消息源發(fā)送請求,要求交互ID的進度的指示。消息目的地收到交互已經(jīng)進展、從而具有該消息ID的消息可被棄置的指示。消息目的地棄置消息的第二副本。
在其它實施例中,消息目的地收到與一個在先的實例ID對應(yīng)的消息的第一副本。接著,消息目的地在初始化成具有該在先實例ID的消息處理器實例處處理消息的第一副本。消息目的地檢測到目的地計算機系統(tǒng)所利用的存儲器內(nèi)容有無意的丟失。消息目的地重新初始化消息處理器實例,使更新的實例ID與在先的實例ID不同。消息目的地在重新初始化消息處理器實例之后收到消息的第二副本,消息的第二副本對應(yīng)于在先的實例ID。消息目的地拒收消息的第二副本,因為消息的第二副本對應(yīng)于與更新的實例ID不同的實例ID。
在另外的實施例中,消息源向具有與消息源時鐘頻率同步的時鐘頻率的消息目的地發(fā)送具有交互ID、消息ID和TTL值的消息第一副本。消息源在發(fā)送消息的第一副本之后,向目標計算機系統(tǒng)發(fā)送具有交互ID、消息ID和更新TTL值的消息第二副本。更新TTL值是從消息的第一副本中指定的TTL值減去從消息的第一副本被發(fā)送起已過去的時間計算出來的。消息源檢測到消息TTL到期。消息源更新交互高速緩存以指示消息不再需要確認。
在本發(fā)明范圍之內(nèi)的實施例包括計算機可讀介質(zhì),用以裝載或持有存儲在其上的計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)。此類計算計可讀介質(zhì)可以是通用或?qū)S糜嬎阌嬒到y(tǒng)可訪問的任何可用介質(zhì)。作為示例,而非限制,此類計算機可讀介質(zhì)可包括物理存儲介質(zhì),諸如RAM、ROM、EPROM、CD-ROM或其它光盤存儲、磁盤存儲或其它磁存儲設(shè)備、或任何其它可用于裝載或存儲計算機可執(zhí)行指令、計算機可讀指令、或數(shù)據(jù)結(jié)構(gòu)所需程序代碼手段、并可由通用或?qū)S糜嬎銠C系統(tǒng)訪問的介質(zhì)。
在此描述及所附權(quán)利要求書中,“網(wǎng)絡(luò)”定義為實現(xiàn)計算機系統(tǒng)和/或模塊之間電子數(shù)據(jù)的傳輸?shù)囊粋€或多個數(shù)據(jù)鏈路。當通過網(wǎng)絡(luò)或其它通信連接(有線的、無線的、或有線和/或無線的組合)向計算機系統(tǒng)傳送或提供信息時,該連接被恰如其分地表述為術(shù)語計算機可讀介質(zhì)。以上各項的組合也應(yīng)被包括到計算機可讀介質(zhì)的范圍之內(nèi)。計算機可讀指令包括例如使通用計算機系統(tǒng)或?qū)S糜嬎銠C系統(tǒng)執(zhí)行某個功能或某組功能的指令和數(shù)據(jù)。計算機可執(zhí)行指令可以是例如二進制碼、諸如匯編語言等中間格式指令或甚至源代碼。
在此描述及所附權(quán)利要求書中,“計算機系統(tǒng)”定義為協(xié)同工作以對電子數(shù)據(jù)進行操作的一個或多個軟件模塊、一個或多個硬件模塊、或其組合。例如,計算機系統(tǒng)的定義包括個人計算機的硬件組件,以及諸如該個人計算機的操作系統(tǒng)等軟件模塊。各個模塊的物理布局并不重要。計算機系統(tǒng)可包括經(jīng)由網(wǎng)絡(luò)耦合的一個或多個計算機。類似地,計算機系統(tǒng)可包括單個物理設(shè)備(諸如移動電話或個人數(shù)字助理“PDA”),其中各個內(nèi)部模塊(諸如存儲器和處理器)協(xié)同工作以對電子數(shù)據(jù)進行操作。
本領(lǐng)域技術(shù)人員應(yīng)當理解,可在網(wǎng)絡(luò)計算環(huán)境中用許多類型的計算機系統(tǒng)配置來實施本發(fā)明,這些配置包括,個人計算機、膝上計算機、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程的消費者電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、大型計算機、移動電話、PDA、尋呼機、等等。本發(fā)明還可在分布式系統(tǒng)環(huán)境中實施,其中通過網(wǎng)絡(luò)連接的(通過有線的數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路、或通過有線和無線數(shù)據(jù)鏈路的結(jié)合)本地和遠程計算機系統(tǒng)同時執(zhí)行任務(wù)。在分布式系統(tǒng)環(huán)境中,程序模塊可同時位于本地和遠程記憶存儲設(shè)備中。
在此描述和所附權(quán)利要求書中,“消息源”定義為可靠的消息通信交換的起源。消息源既可表示創(chuàng)建了要可靠傳送的消息的應(yīng)用程序,又可表示管理可靠交換的基礎(chǔ)結(jié)構(gòu)。在簡單對象訪問協(xié)議(“SOAP”)處理模型中,源是初始發(fā)送者。
在此描述和所附權(quán)利要求書中,“消息目的地”定義為可靠的消息通信交換的目標。消息目的地既可表示使用消息的應(yīng)用程序,又可表示管理可靠交換的基礎(chǔ)結(jié)構(gòu)。在SOAP處理模型中,目的地是最終的接收者。
在此描述和所附權(quán)利要求書中,當消息源和消息目的地的時鐘滴答頻率在頻率的可允許漂移上處于某指定上限之內(nèi)時,消息源和消息目標具有“同步的時鐘頻率”。
漂移可以各種不同方式定義。當指全球世界時鐘時,偏移可定義為偏移=|(S2-S1)-(D2-D1)|/(C2-C1)并且上限可定義為上限=Min(單向等待時間)/Max(TTL)其中S1和D1分別是在世界時鐘有值C1的實例時,源和目的地處的時鐘值,且S2和D2分別是在后來世界時鐘有值C2的實例時,源和目的地處的時鐘值。當漂移<上限時,漂移是可允許的(即,源和目的地時鐘可視為具有同步的頻率)。
單向等待時間是從目的地到源測量的(例如,如目的地為某未知序列所初始化的“REQACKACK”消息的等待時間所捕獲的)。TTS是在某個消息上指定的TTL,諸如往返延遲的倍數(shù)。因此,指定消息的較大TTL導(dǎo)致對源和目的地時鐘的漂移率有更嚴格的要求。另一方面,指定消息的較小TTL導(dǎo)致對源和目的地時鐘的漂移率有較寬松的要求。
不參考全球世界時鐘的情況下,從源的角度出發(fā)的漂移可定義為漂移-源=(D2-D1)/(S2-S1)從目的地角度出發(fā)的漂移可定義為漂移-目的地=(S2-S1)/(D2-D1)且上限可定義為上限=Min(單向等待時間)/Max(TTL)。
以上假設(shè)兩個時鐘都往前走。即,S2>S1且D2>D1。在某些例子中,例如,當目的地時鐘走得較快,可能出現(xiàn)漂移-源>1且漂移-目的地<1的情況。當漂移-目的地<上限時,漂移是可允許的(即,源和目的地可視為具有同步的頻率)。單向等待時間是從目的地到源測量的。TTL是消息上指定的TTL,諸如往返延遲的倍數(shù)。
應(yīng)當理解,本發(fā)明的實施例不要求各時鐘同步到絕對時間。
消息通信體系結(jié)構(gòu)圖1示出便于用具有同步頻率的時鐘的可靠消息通信的計算機體系結(jié)構(gòu)100的例子。如計算機體系結(jié)構(gòu)100中所示,計算機系統(tǒng)102、103、104、106和107連接到網(wǎng)絡(luò)101。網(wǎng)絡(luò)101可以是局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)、或甚至因特網(wǎng)。連接到網(wǎng)絡(luò)101的計算機系統(tǒng)可從計算機體系結(jié)構(gòu)100中所連接的其它計算機系統(tǒng)接收數(shù)據(jù)或往其發(fā)送數(shù)據(jù)。據(jù)此,計算機系統(tǒng)102、103、104、106和107,以及其它連接的計算機系統(tǒng)(未圖示),可通過網(wǎng)絡(luò)101交換消息相關(guān)的數(shù)據(jù)(例如,因特網(wǎng)協(xié)議(“IP”)數(shù)據(jù)報和諸如傳輸控制協(xié)議(“TCP”)、超文本傳輸協(xié)議(“HTTP”)、簡單郵件傳輸協(xié)議(“SMTP”)等其它使用IP數(shù)據(jù)報的較高層協(xié)議)。
計算機系統(tǒng)102、103、104、106和107分別包括對應(yīng)的交互高速緩存122、123、124、126和127。這些交互高速緩存122、123、124、126和127的每一個可維護對應(yīng)于與其它計算機系統(tǒng)的交互序列的交互ID、和已為每個交互序列所處理的消息的消息ID的列表。這些交互高速緩存122、123、124、126和127的每一個還可為每個消息維護存活時間(“TTL”)值。TTL值可指示源試圖向目的地傳送消息的持續(xù)時間。當在源處TTL到期,源可指示該消息不再需要確認(例如,作為源視其為已丟失的結(jié)果)。當在目的地處TTL到期,目的地隨即可從交互高速緩存中移除對應(yīng)的消息ID和/或交互ID(從而釋放了系統(tǒng)資源)。
計算機系統(tǒng)102、103、104、106和107分別包括對應(yīng)的時鐘112、113、114、116和117。這些時鐘112、113、114、116和117的每一個都具有同步的頻率。即,這些時鐘在時間上以本質(zhì)上同樣的頻率前進。例如,在時鐘112、113、114、116和117之間對秒、分、小時、日、月、年等的定義可以有一個共識。因此,即使當多個時鐘的絕對時間不同步時,多個時鐘之間時間的相對改變可以是一致的。
據(jù)此,當某段時間以后第一時鐘前進若干分鐘時,第二時鐘(有和第一時鐘同步的頻率)會前進同樣的分鐘數(shù)的可能性是極高的。例如,可能第一時鐘有絕對時間下午5:05,且第二時鐘有絕對時間下午5:07。如果,在6分鐘后,第一時鐘前進至下午5:11,則第二時鐘已前進至下午5:13的可能性是極高的。
此外,應(yīng)當理解,各時鐘的頻率相對于彼此可能有一些漂移,而這些時鐘仍可被視為具有同步的頻率的時鐘。例如,當通信中的計算機系統(tǒng)處的時鐘之間的漂移率少于通信計算機系統(tǒng)之間的往返等待時間時,本發(fā)明的實施例尤其有利。
在某些實施例中,目的地可在源認為某消息(A)已被處理過或(B)已丟失之后,遺忘它已經(jīng)處理過該消息(例如,通過從存儲器中移除某個消息交互)。在實施中,當目的地(從源)收到包含對應(yīng)消息ID的ACKACK頭時可發(fā)生事件(A)。在實施中,當TTL到期時可發(fā)生事件(B)。即,目的地知道,如果源的TTL到期則源認為消息丟失。在某些實施例中,在最小往返延遲之后消息得到確認(發(fā)送消息,接著收到確認)。因此,可將TTL設(shè)為某個大于往返延遲的值。在實施中,將TTL設(shè)成往返延遲的倍數(shù)以支持若干次的重新發(fā)送(或設(shè)成一無限值以便于恰好一次傳送(exactly-once-delivery))。
可能計算機系統(tǒng)107包括從包括計算機系統(tǒng)102、103、104和106處的客戶程序等大量客戶程序(例如,Web瀏覽器)接收電子消息的服務(wù)器(例如,Web服務(wù)器)。因此,計算機系統(tǒng)107可執(zhí)行處理從這些客戶程序中的任何一個所收到的消息的消息處理(例如,消息處理實例137)。
消息源算法現(xiàn)在參考圖6,圖6示出使源能夠可靠傳送消息的方法600的示例性流程圖。方法600包括向消息添加交互ID、序列號、和TTL值的動作。例如,計算機系統(tǒng)106可向消息152添加交互ID 152、計數(shù)153、和TTL值154。從而,消息可以是消息(ID,N,TTL,數(shù)據(jù))的格式,其中數(shù)據(jù)增加了可靠消息通信基礎(chǔ)結(jié)構(gòu)所使用的跟蹤信息。
ID唯一地標識消息源和消息目的地之間的交互。消息偏移量N可以是標識消息源和消息目的地之間的互動中某個消息的偏移量(例如,序號)的整數(shù)值。交互ID和消息偏移量N在一起可以唯一地標識一個可靠消息。TTL指示消息源將試圖可靠傳送某消息的持續(xù)事件。
方法600包括啟動具有TTL值持續(xù)事件的倒數(shù)計時器的動作(動作602)。例如,計算機系統(tǒng)106可啟動具有TTL值154的持續(xù)時間的倒數(shù)計時器。方法600包括發(fā)送消息的動作。例如,計算機系統(tǒng)106(消息源)可向計算機系統(tǒng)107(消息目的地)發(fā)送消息151。
可能消息源將TTL值設(shè)為消息源和消息目的地之間的往返等待時間的倍數(shù)。在某個指定的間隔(例如,等于往返等待時間),消息源可試圖重新發(fā)送消息(例如,消息151)。例如,如果計算機系統(tǒng)106和107之間的往返等待時間為10毫秒,TTL值可設(shè)為60毫秒。將TTL值設(shè)為60毫秒將允許至少6次重新發(fā)送(取決于具體的間隔)。
方法600包括檢測重新發(fā)送間隔到期的動作(動作604)。例如,計算機系統(tǒng)106可檢測對應(yīng)于消息151的重新發(fā)送間隔到期。
方法600包括判定消息是否已得到確認(判定框605)。當消息已得到確認(判定框605處為是),方法600執(zhí)行動作607。例如,計算機系統(tǒng)106可從計算機系統(tǒng)107接收指示交互ID 152和計數(shù)153的ACK。從而,確認可以是ACK(ID,N)的形式,其中確認指示ID所標識的交互的消息N(或N所表示的一個或多個消息偏移量范圍,諸如(1-6,10-14,16))到達消息目的地。當消息源收到ACK,消息源可更新對應(yīng)的交互高速緩存(例如,交互高速緩存126),以指示某消息(例如,消息151)不再需要確認。
另一方面,當消息未得到確認(判定框605處為否),方法600在判定框606進行判定。因此,方法600可包括判定倒數(shù)計時器是否已經(jīng)到期(判定框606)。例如,計算機系統(tǒng)106可判定基于TTL值154的倒數(shù)計時器是否已到期。當?shù)箶?shù)計時器到期時(判定框606處為是),方法600執(zhí)行動作607。另一方面,當?shù)箶?shù)計時器還未到期時(判定框606處為否),方法600執(zhí)行動作608。
方法600包括重新計算TTL值和倒數(shù)計時器的動作(動作608)。例如,計算機系統(tǒng)106可在檢測到重新發(fā)送的間隔之后為消息151重新計算TTL值和倒數(shù)計時器。因此,如果初始TTL值為60毫秒且重新發(fā)送間隔為10毫秒,則可在重新發(fā)送消息151前將新的TTL值設(shè)為50毫秒。
方法600包括指示消息不再需要確認的動作(動作607)。例如,計算機系統(tǒng)106可更新交互高速緩存126以指示消息151不再需要確認。因此,計算機系統(tǒng)106在從計算機系統(tǒng)107收到確認之后,或在倒數(shù)計時器到期時,終止消息151的任何重發(fā)。
消息源可不時地或響應(yīng)于來自消息目的地的請求而發(fā)送確認-確認(ACKACK),以向消息目的地指示消息源不再需要確認。例如,計算機系統(tǒng)106可向計算機系統(tǒng)107發(fā)送包括交互ID 152和計數(shù)153的ACKACK 171。從而,確認-確認可以是ACKACK(ID,N)的形式,其中確認-確認指示對于ID所標識的交互,消息源不再需要對消息N(或N所表示的一個或多個消息偏移量范圍,諸如(1-3,5,8-12))的確認。ACKACK還可包括表示消息目的地處的消息處理器實例的實例ID。例如,ACKACK 171包括對應(yīng)于計算機系統(tǒng)106已知的消息處理實例137的最后一個實例的實例ID 172。
來自消息目的地的請求可以是指示消息目的地需要交互的進度的請求確認-確認消息(圖1中未示出)。由此,請求確認-確認可以是REQACKACK(ID)的形式,其中請求確認-確認指示消息目的地在繼續(xù)進行之前需要ID所標識的交互的進度。源可周期性地和在收到REQACKACK(ID)時,向目的地發(fā)送ACKACK(ID,N)。
消息目的地算法現(xiàn)在參考圖7,圖7示出使目的地能可靠傳送消息的方法700的示例性流程圖。方法700包括接收消息的動作。例如,計算機系統(tǒng)107可接收消息151(動作701)。方法700包括判定收到的實例ID(如果有的話)是否匹配當前的實例ID。例如,計算機系統(tǒng)107可判定實例ID 172是否匹配消息處理實例137的當前實例ID。計算機系統(tǒng)106可選擇性地在消息151中包括實例ID 172(未圖示)。但是,可要求計算機系統(tǒng)106將其包括在它響應(yīng)于REQACKACK所發(fā)送的ACKACK消息中。例如,在收到消息151之后,計算機系統(tǒng)107可向計算機系統(tǒng)106發(fā)送REQACKACK(交互ID 152)。計算機系統(tǒng)106可以ACKACK(交互ID 152,消息偏移量(可能和計數(shù)153不同),實例ID 172)響應(yīng)。
當收到的實例ID不匹配當前實例ID(判定框702處為否),方法700執(zhí)行動作708。另一方面,當收到的實例ID匹配當前實例ID時(判定框702處為是),方法700進行判定框703處的判定。
方法700包括判定消息是否需要確認(判定框703)。例如,計算機系統(tǒng)107可判定消息151是否需要確認。計算機系統(tǒng)107可檢查交互高速緩存127以判定是否先前曾收到過消息151的ACKACK。如果先前收到過ACKACK,消息151不再需要確認??赡芙换ジ咚倬彺?27不包括交互ID 151所標識的交互。因此,計算機系統(tǒng)107可向計算機系統(tǒng)106發(fā)送REQACKACK(交互ID 151)。響應(yīng)于此,計算機系統(tǒng)107可從計算機系統(tǒng)106收到對應(yīng)的ACKACK。計算機系統(tǒng)107可用ACKACK中的進度信息(例如,消息偏移量和實例ID)更新交互高速緩存127。
方法700包括發(fā)送確認的動作(動作704)。例如,計算機系統(tǒng)107可向計算機系統(tǒng)106發(fā)送包括實例ID 152和計數(shù)153的ACK 161以確認收到消息151。
方法700還包括判定是否要處理消息。例如,計算機系統(tǒng)107還可判定是否要處理消息151。當不要處理消息時(判定框705處為否),方法700執(zhí)行動作708。另一方面,當要處理消息時(判定框705處為是),方法700執(zhí)行動作706。
方法700包括啟動倒數(shù)計時器的動作(動作706)。例如,一收到消息151,計算機系統(tǒng)107可啟動基于TTL值154的倒數(shù)計時器。計算機系統(tǒng)107必需維護交互ID 152和計數(shù)153,直至計數(shù)器到期,或收到對應(yīng)的ACKACK。方法700包括處理消息的動作(動作707)。例如,計算機系統(tǒng)107可向消息處理實例137傳送消息151,消息處理實例137進而處理該消息。
方法700包括更新交互高速緩存的動作(動作709)。例如,計算機系統(tǒng)107可更新交互高速緩存127。交互高速緩存可在收到ACKACK(例如,ACKACK 171)之后更新,或者在倒數(shù)計時器(例如,基于TTL值154)到期之后更新。因此,計算機系統(tǒng)107可刷新交互高速緩存127中倒數(shù)計時器已到期且交互ID已空閑了一段時間的交互。
方法700包括棄置消息的動作(動作708)。例如,計算機系統(tǒng)107可棄置消息151。當實例ID不匹配時,先前收到消息的ACKACK時,先前已處理過該消息時,或某消息的倒數(shù)計時器已到期時,消息可被棄置。
消息源和消息目的地相互操作方法600(消息源的角度)和方法700(消息目的地的角度)可相互操作以提供可靠的消息通信。在某些實施例中,在處理初始消息序列之前先設(shè)立各種預(yù)設(shè)條件。例如,消息源接收唯一地標識消息目的地端點實例(例如,消息處理實例137)的端點引用,且呈送給消息目的地端點實例的各消息之間的相關(guān)性是有意義的。每當消息目的地端點實例被初始化時,目的地可復(fù)位實例ID(例如,無狀態(tài)引導(dǎo)時間)。此外,消息源可以還知道消息目的地的策略(如果它們存在的話),并且能夠按此構(gòu)造遵守任何策略的消息(例如,在WS-Metadata Exchange的幫助下)。此外,當要求安全消息交換時,消息源和消息目的地可建立安全的上下文(例如,在WS-SecureConversation的幫助下)。
甚至在當目的地從存儲器周期性地移除可靠的消息通信序列信息時,其它保護可靠的消息通信序列信息的機制也是可能的。例如,消息目的地可用私鑰(例如,屬于某公鑰/私鑰對)加密會話密鑰(或共享密鑰),并向消息源發(fā)送該加密的會話密鑰(例如,在令牌中)。消息源收到令牌并可保留該令牌供稍后使用。消息源還可用對應(yīng)的公鑰(屬于某公鑰/私鑰對)將加密的會話密鑰解密,以揭示未加密的會話密鑰。交互中的后續(xù)消息可用此會話密鑰來保護。
消息目的地可能不時地收到該消息目的地已經(jīng)遺忘(即,交互ID等已從對應(yīng)交互高速緩存中移除)的某個交互的消息。響應(yīng)于此,消息目的地可向消息源發(fā)送REQACKACK,請求該交互的跟蹤信息。響應(yīng)于REQACKACK(可能包括在ACKACK中),消息源可向消息目的地發(fā)送先前收到的該交互的令牌。消息目的地可解密該令牌(它知道其自身的公鑰/私鑰對)以揭示對應(yīng)于該交互的未加密會話密鑰或共享密鑰。交互中所包括的后續(xù)消息可用此會話密鑰來保護。
當消息源不能提供某交互的令牌時(并因此不能提供對應(yīng)的會話或共享密鑰),消息目的地啟動具有新的交互ID和消息ID為1的新的交互。消息目的地可隨即向消息源發(fā)送新的令牌,為新的交互建立新的安全環(huán)境。由此,本發(fā)明的實施例可用于減少,或可能防止,可靠消息通信會話被截取的可能性。
此外,還可建立各種協(xié)議的變體,以確保可靠的消息通信。例如,消息源可將消息偏移量(N)初始化到1,并為交互中每個后續(xù)的消息將消息偏移量增加1。此外,確認可包括消息目的地成功地收到的、或者ACKACK中指定的除未收到的消息的消息偏移量以外的每個消息的一個或多個范圍。因此,消息源發(fā)布的ACKACK可包括每個已收到ACK或TTL已到期的消息的一個或多個消息偏移量的確認范圍。當TTL到期,目的地知道源認為消息(或某些范圍的消息)已經(jīng)丟失。因此,目的地可關(guān)閉對該消息(或該范圍消息)的消息范圍的確認。
因此,當在各種不同條件下收到消息的多個副本時,確保對消息處理實例進行至多一次傳送。例如,當消息ID和對應(yīng)的指定交互在消息目的地處的某個交互高速緩存中維護時(在TTL到期之前或之后),當消息ID(可能還有對應(yīng)的指定交互)已被刷新出消息目的地處的交互高速緩存時,及當消息目的地遭受無意的存儲丟失時,確保了至多一次傳送。
當消息目的地處收到消息時,消息目的地判定所收到的消息是否包括實例ID。如果收到的消息不包括實例ID,并且該消息所指定的交互ID未在交互高速緩存中出現(xiàn)時,消息目的地向消息源發(fā)送REQACKACK。消息源以包括實例ID的ACKACK(基于所建立的協(xié)議變體)來響應(yīng)。所收到的實例ID(無論是包括在消息中或ACKACK中)是向消息源指示為先前某個時間的對應(yīng)消息處理器實例的當前ID(基于所建立的預(yù)設(shè)條件)的實例ID。消息目的地將收到的實例ID與對應(yīng)消息處理器的當前ID相比。當收到的實例ID和當前ID不匹配時(可能指示消息目的地在指定交互期間遭受無意的存儲丟失),則拒收該消息,并且使指定的交互失敗。
另一方面,當收到的實例ID與當前ID匹配時(因此消息目的地在指定交互期間維護了交互高速緩存),檢查來自收到的消息的其它跟蹤信息。消息目的地檢查對應(yīng)的交互高速緩存以判定所收到消息的消息ID和交互ID是否先前被處理過。因為消息目的地可能周期性地刷新對應(yīng)的交互高速緩存(但不一定立即在TTL值到期后立即刷新),交互高速緩存甚至可為過期的消息維護跟蹤信息(至少某段時間)。因此,對應(yīng)的交互高速緩存可指示消息先前被處理過,作為所收到的消息被傳送到消息處理器實例的結(jié)果。當對應(yīng)的交互高速緩存指示所收到的消息先前被處理過時,所收到的消息被棄置。
但是,可能對應(yīng)的交互高速緩存不包括消息的跟蹤信息。當對應(yīng)的交互高速緩存不包括跟蹤信息時,消息目的地向消息源發(fā)送REQACKACK。例如,可能所收到的消息先前被目的地處理過。如果對于所收到的消息所指定的交互ID,跟蹤信息沒有在目的地交互高速緩存中出現(xiàn),則對于消息目的地處所有是指定交互的-部分的消息,倒數(shù)計時器肯定已經(jīng)到期。否則,目的地消息處理器不可能已經(jīng)將指定交互從其交互高速緩存中刷新掉。這指示消息的倒數(shù)計時器在消息源肯定也已經(jīng)到期,因為消息源將在發(fā)送消息之前啟動倒數(shù)計時器,并且消息源和消息目的地具有同步的時鐘頻率。
在消息源處,或通過接收先前的ACK,或通過倒數(shù)計時器到期,消息源指示(在返回的ACKACK中)不再需要對該消息的確認(即使最后在倒數(shù)計時器到期之前已發(fā)送了該消息)。消息目的地接收ACKACK,并將來自該ACKACK的跟蹤信息與消息中所包括的跟蹤信息對比。因為ACKACK指示不需要對該消息的確認,所以消息目的地棄置該消息。
圖2示出便于在消息ID在消息目的地的交互高速緩存中維護時的可靠消息通信的第一個示例性消息流程。當在TTL到期之前收到消息的第二副本時,消息流程200確保至多一次傳送。
如消息流程200中所示,源201和目的地202交換電子消息。可能源201是計算機系統(tǒng)102、103、104和106中的一個,目的地202是計算機系統(tǒng)107。源210和目的地202具有以同步的時鐘頻率203前進的時鐘。因此,源201和目的地202處的時間值的相關(guān)改變是一致的可能性極高。例如,如果在某段時間以后,源201處的時鐘前進了10分12秒,則在同一段時間以后目的地202處的對應(yīng)時鐘也前進了10分12秒的可能性極高。
消息流程200包括消息源201(例如,Web瀏覽器)發(fā)送消息204的動作。消息204包括交互ID 214、消息ID 224、存活時間(TTL)值234和數(shù)據(jù)244。交互ID 214將消息204標識為對應(yīng)于消息源201和消息目的地202之間的某個指定交互。消息ID 224標識消息204在作為指定交互(對應(yīng)于交互ID 214)的一部分所交換的消息序列中的位置。數(shù)據(jù)244是一部分要傳輸?shù)侥康牡?02處的某個模塊(例如,消息處理器實例236)的數(shù)據(jù)(例如,應(yīng)用程序數(shù)據(jù))。TTL值234指示源201將試圖傳送消息204的時間長度。
基于TTL值234,消息源201可設(shè)置計時器持續(xù)時間241的計時器239。
消息目的地202(例如,Web服務(wù)器)可接收消息204。一收到消息204,消息目的地202可向消息處理器實例236傳輸數(shù)據(jù)244,消息處理器實例236進而處理數(shù)據(jù)244。可更新交互高速緩存237以指示消息204已被處理。例如,可更新交互高速緩存237以指示已為交互ID 214所標識的交互處理了具有消息ID 224的消息?;赥TL值234,計時器249可設(shè)置計時器持續(xù)時間251。計時器持續(xù)時間251在計時器持續(xù)時間241之后的某時到期(例如,至少再過消息204的消息等待時間)。
消息目的地202可發(fā)送包括交互ID 214和消息ID 224的ACK消息208以指示消息204已被處理。但是,消息源201可能沒有收到ACK消息208(例如,由于連接消息源201和消息目的地202的網(wǎng)絡(luò)上的通信錯誤)。因此,當重新發(fā)送間隔到期,消息源201可向消息目的地202發(fā)送消息204的一個額外副本。如TTL值235所示,消息源201可為消息204重新計算TTL值,令其為到計時器239到期的所剩時間。
消息目的地202可在處理消息204的較早版本以后接收消息204的額外副本。消息目的地202可從交互ID 214和消息ID 224標識消息的額外副本。消息目的地202可檢查交互高速緩存237并判定具有消息ID 224并對應(yīng)于交互ID 214所標識的指定交互的消息(即,消息204)是否先前被處理過。由此,消息目的地可基于指示具有該消息ID 224的消息先前已被處理過的交互高速緩存237,棄置消息204的額外副本。
消息流程200還可在TTL到期之后收到消息的第二副本時確保至多一次傳送。例如,TTL值234可替換地使計時器239設(shè)置計時器持續(xù)時間242,并使計時器249設(shè)置計時器持續(xù)時間252。計時器持續(xù)時間252在計時器持續(xù)時間242之后的某個時間到期(例如,至少再過消息204的消息等待時間)。
因此,如圖2中所示,消息目的地202可在計時器持續(xù)時間252到期之后接收消息204的額外副本。但是,消息目的地202可在將交互ID 214和消息ID 224從存儲器刷新掉之前等待一些時間。因此,當收到消息204的額外副本時,交互高速緩存237仍然包括交互ID 214和消息ID 224,即使消息持續(xù)時間252已經(jīng)到期。因此,消息目的地202可基于指示具有消息ID 224的消息先前已經(jīng)被處理過的交互高速緩存237而拒收消息204的額外副本。由此,在交互高速緩存維護消息ID時確保了至多一次傳送。
圖3示出便于在消息ID被從消息目的地的交互高速緩存中被刷新掉時可靠地處理消息的第二個示例性消息流程。消息流程300在對應(yīng)消息偏移量已從存儲器刷新掉之后收到消息的第二副本時確保至多一次傳送。
如消息流程300中所示,消息源301和消息目的地302交換電子消息??赡茉?01是計算機系統(tǒng)102、103、104和106中的一個,消息目的地302是計算機系統(tǒng)107。消息源301和消息目的地302可具有以同步的時鐘頻率303前進的時鐘。因此,消息源301和消息目的地302處的時間值的相對變化一致的可能性極高。例如,如果在某段時間之后,消息源301處的時鐘前進了8分24秒,則在同一段時間之后消息目的地302處的對應(yīng)時鐘也前進了8分24秒的可能性極高。
消息源301(例如,Web瀏覽器)發(fā)送消息304。消息304包括交互ID 314、消息ID 324、存活時間(TTL)值334和數(shù)據(jù)344。交互ID 314將消息304標識成對應(yīng)于具有消息目的地302的指定交互。消息ID 342標識消息304在作為指定交互(對應(yīng)于交互ID 314)的一部分所交換的消息序列中的消息序列位置。數(shù)據(jù)344是一部分要傳送到消息目的地302處的某個模塊(例如,到消息處理器實例336)的數(shù)據(jù)(例如,應(yīng)用程序數(shù)據(jù))。TTL值334指示消息源301將試圖傳送消息304的時間長度。
基于TTL值334,消息源301可設(shè)置計時器持續(xù)時間341的計時器339。
消息目的地302(例如,Web服務(wù)器)可接收消息304。一收到消息304,消息目的地302可向消息處理器實例336傳送數(shù)據(jù)344,消息處理器實例336進而處理數(shù)據(jù)344??筛陆换ジ咚倬彺?37以指示消息304已被處理。例如,可更新交互緩存337以指示已為交互ID 314所標識的交互處理了具有消息ID 324的消息?;赥TL值334,計時器349可設(shè)置計時器持續(xù)時間351。計時器持續(xù)時間351在計時器持續(xù)時間341之后的某個時間到期(例如,至少再過消息304的消息等待時間)。
消息目的地302可發(fā)送包括交互ID 314和消息ID 324的ACK消息308以指示消息304已被處理。但是,消息源301可能沒有收到ACK消息308(例如,由于連接消息源301和消息目的地302的網(wǎng)絡(luò)上的通信錯誤)。因此,當重新發(fā)送間隔到期,消息源301可向消息目的地302發(fā)送消息304的額外副本。消息目的地302從消息源301接收消息304的額外副本。如TTL值335所示,消息源301可為消息304重新計算TTL值,令其為計時器339到期所剩的時間。
計時器持續(xù)時間351到期之后,消息ID 324(及還可能有交互ID 314)被從交互高速緩存337刷新掉。如消息流程300中所示,消息304的額外副本在計時器持續(xù)時間341到期之前從消息源301發(fā)送,并在計時器持續(xù)時間351到期之后在消息目的地302收到。在消息ID 324(及還可能有交互ID 314)從交互高速緩存337中被移除之后,消息目的地302還收到消息304的額外副本。因此,當收到消息目的地302的額外副本時,交互高速緩存337不包括消息304的跟蹤信息。
由此,消息目的地302可向消息源301發(fā)送包括交互ID 314的REQACKACK306。REQACKACK 306是對交互ID 314所標識的交互的進度的指示的請求。此外,在發(fā)送了消息304的額外副本之后的某個時間,計時器持續(xù)時間(341或其等效時間)到期,且消息源301更新交互高速緩存327以指示消息104不再需要確認。例如,可更新交互高緩存速緩存327以指示對于交互ID 314所標識的交互,具有消息ID 324的消息不再需要確認。因此,響應(yīng)于REQACKACK 306,消息源301向消息目的地302發(fā)送包括交互ID 314和消息偏移量324的ACKACK 307。ACKACK307指示交互ID 324所標識的交互已經(jīng)進展至具有消息ID 324的消息可被棄置(即,不需要確認)的程度。因此,消息目的地302棄置消息304的額外副本。
一般而言,消息目的地302被配置成在不終止參與某個交互的情況下,從存儲器移除涉及該交互的跟蹤信息(即,遺忘跟蹤信息)。當消息目的地302收到對應(yīng)于沒有包括在交互高速緩存337中的交互的消息,消息目的地302向適當?shù)南⒃?例如,消息源301)發(fā)送REQACKACK。消息源通過向消息目的地302返回包括該交互有關(guān)跟蹤信息的對應(yīng)ACKACK來響應(yīng)。因此,適當?shù)南⒃纯捎眠m當?shù)母櫺畔⒏孪⒛康牡?。由此,即使在交互高速緩存已被刷新時,仍可確保至多一次傳送。
圖4示出便于在消息目的地遭受無意的存儲丟失時可靠地處理消息的第三個示例性消息流程。消息流程400在無意的存儲丟失后收到消息的第二副本時確保至多一次傳送。
如消息流程400中所示,消息源401和消息目的地402交換電子消息??赡芟⒃?01是計算機系統(tǒng)102、103、104和106中的一個,消息目的地402是計算機系統(tǒng)107。源401和目的地402可具有以同步的時鐘頻率403前進的時鐘。因此,消息源401和消息目的地402處的時間值的相對改變一致的可能性極高。例如,如果在某段時間之后,消息源401處的時鐘前進了8分24秒,則在同一段時間以后消息目的地402處的對應(yīng)時鐘也前進了8分24秒的可能性極高。
消息源401(例如,Web瀏覽器)發(fā)送消息404。消息404包括交互ID 414、消息ID 424、數(shù)據(jù)444,并可選擇性地包括(如虛線所示)實例ID 452。交互ID 414將消息404標識為對應(yīng)于與消息目的地402的指定交互。消息ID 424標識消息404在作為指定交互(對應(yīng)于交互ID 314)的一部分所交換的消息序列中的消息序列位置。數(shù)據(jù)344是要傳輸?shù)较⒛康牡?02處的某個模塊(例如,到消息處理器實例451)的數(shù)據(jù)(例如,應(yīng)用程序數(shù)據(jù))。實例ID 452是向消息源指示為先前某個時間的消息處理器實例451的當前實例ID的實例ID(基于建立的預(yù)定條件)。
消息目的地402(例如,Web瀏覽器)收到對應(yīng)于實例ID 452的消息404。已檢測到消息404中的實例ID和消息處理實例451的當前實例ID(例如,實例ID452)相匹配時,消息目的地402即對跟蹤信息進行其它檢查。在適當時候,消息目的地402向消息處理器實例451傳送數(shù)據(jù)444,消息處理器實例451進而處理數(shù)據(jù)444。可更新交互高速緩存437以指示消息404已被處理。例如,可更新交互高速緩存437以指示已為交互ID 414所標識的交互處理了具有消息ID 424的消息。
在處理消息404之后,消息目的地402可能遭受無意的存儲丟失(包括交互高速緩存437的內(nèi)容)。因此,消息目的地402檢測到(例如,在重新啟動序列期間)消息目的地402所用的存儲器內(nèi)容無意地丟失了。因此,消息目的地402可將消息處理器實例451重新初始化成具有和在先實例ID 452不同的更新實例ID 462。
因為消息源401沒有收到對消息404的確認,消息源401可試圖重新發(fā)送消息404的額外副本(例如,當重新發(fā)送間隔到期時)。如圖所示,消息404的額外副本選擇性地包括實例ID 452。消息目的地402將消息404的額外副本中所包括的實例ID(實例ID 452)與消息處理器實例的當前實例ID(實例ID 462)對比。消息目的地402拒收該消息(使對應(yīng)于交互ID 414的交互失敗),因為消息404的額外副本對應(yīng)于實例ID 452而不是實例ID 462。
當實例ID沒有包括在消息404中時,消息目的地402可選擇性地發(fā)送REQACKACK來請求對應(yīng)于交互ID 414的交互的進度。消息源401可用包括交互ID 414、消息ID 424和實例ID 452的ACKACK 407來響應(yīng)。從ACKACK 407,消息目的地402可判定應(yīng)拒收消息404的額外副本(對應(yīng)于交互ID 414的交互將失敗)。此外,REQACKACK 406可選擇性地包括實例ID 462。因此,消息源401可在新的交互的開始學(xué)習(xí)消息處理器實例451的實例ID。即,當REQACKACK包含目的地實例ID時,源可檢測到目的地已經(jīng)重新啟動。因此,當目的地遭受無意的存儲丟失時,確保了至多一次傳送。
一般而言,應(yīng)當理解在確認(ACK和ACKACK)中可包括多個消息偏移量ID。例如,確認可包括交互中某個范圍的消息偏移量(例如,19-23)、交互中消息偏移量的列表(例如,1、4、7)、或交互中的消息偏移量的范圍和列表的組合(例如,3、7、14-19、22、24-26)。還應(yīng)理解,可將ACK和REQACKACK定義為消息頭(諸如在SOAP處理模型中),從而可將其附到從目的地到源的任何消息流中。類似地,可將ACKACK定義為消息頭,從而可將其附到從消息源到目的地的任何消息流中。
此外,因為ACKACK消息向消息目的地指示不需要確認的消息(或者因為收到了對應(yīng)的ACK,或者因為這些消息已到期),所以ACKACK消息可用于消除確認范圍之間的空隙。即,ACKACK的使用可使消息目的地將確認范圍和列表合并成單個范圍。例如,消息源可能收到確認1-10、13-15和17-20范圍的消息的ACK消息。接著,消息ID 11和12在消息源處到期。因此,響應(yīng)于在消息ID 11和12到期之后收到的REQACKACK,已發(fā)送的ACKACK可指示消息ID 1-15和17-20不再需要確認。因此,ACKACK可限制確認的大小,從而防止對于長期存在的交互,確認的大小不停地增長。
本發(fā)明的實施例還可在例如TTL值為無限且不使用實例ID時用于恰好一次傳送。
此外,應(yīng)當理解,消息流程200、300和400在任何給定時間,通過網(wǎng)絡(luò)在多個計算機系統(tǒng)之間實施。例如,計算機系統(tǒng)102、103、104和106(以及連到網(wǎng)絡(luò)101的其它計算機系統(tǒng))的每一個可作為實現(xiàn)與計算機系統(tǒng)107的消息流程200、300和400的部件(可能同時地)交換消息。計算機系統(tǒng)102、103、104和106(以及連到網(wǎng)絡(luò)101的其它計算機系統(tǒng))的每一個可適當?shù)卦谕粫r間或不同時間實現(xiàn)消息流程200、300、400。此外,計算機系統(tǒng)102、103、104和106(以及連到網(wǎng)絡(luò)101的其它計算機系統(tǒng))的每一個可實現(xiàn)多個與計算機系統(tǒng)107的消息流程200、300、400??赡芟⒘鞒?00、300和400的每個實例對應(yīng)于不同的交互ID。
圖5示出本發(fā)明的原理的合適的操作環(huán)境。圖5和以下描述旨在提供可實現(xiàn)本發(fā)明的合適計算環(huán)境的簡單、一般的描述。盡管不是必需,將在諸如計算機系統(tǒng)所執(zhí)行的程序模塊等計算機可執(zhí)行指令的通用上下文中描述本發(fā)明。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)結(jié)構(gòu)的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。計算機可執(zhí)行指令、相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)、和程序模塊表示用于執(zhí)行本文所揭示的方法的動作的程序代碼手段的例子。
參考圖5,用于實現(xiàn)本發(fā)明的示例性系統(tǒng)包括計算機系統(tǒng)520形式的通用計算設(shè)備,它包括處理單元521、系統(tǒng)存儲器522和將包括系統(tǒng)存儲器522在內(nèi)的各個系統(tǒng)組件耦合到處理單元521的系統(tǒng)總線523。處理單元521可執(zhí)行設(shè)計成包括本發(fā)明的特征在內(nèi)的計算機系統(tǒng)520的特征的計算機可執(zhí)行指令。系統(tǒng)總線523可以是若干種總線結(jié)構(gòu)中的任何一種,包括存儲器總線或存儲器控制器、外圍總線、使用各種總線體系結(jié)構(gòu)中的任何一種的局部總線。系統(tǒng)存儲器包括只讀存儲器(“ROM”)524和隨機存取存儲器(“RAM”)525。包含在諸如啟動期間幫助在計算機系統(tǒng)520內(nèi)部各元件之間傳輸信息的基本例程的基本輸入/輸出系統(tǒng)(“BIOS”)526可存儲在ROM 524中。
計算機系統(tǒng)520還可包括讀或?qū)懹泊疟P539的硬磁盤驅(qū)動器527、讀或?qū)懣梢苿哟疟P529的磁盤驅(qū)動器528、以及讀或?qū)懼T如CD-ROM或其它光介質(zhì)等可移動光盤531的光盤驅(qū)動器530。硬磁盤驅(qū)動器527、磁盤驅(qū)動器528以及光盤驅(qū)動器530分別由硬盤驅(qū)動器接口532、磁盤驅(qū)動器接口533以及光盤驅(qū)動器接口534連接到系統(tǒng)總線523。這些驅(qū)動器和相關(guān)的計算機可讀介質(zhì)為計算機系統(tǒng)520提供了計算機可執(zhí)行指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊及其它數(shù)據(jù)的非易失性存儲。盡管本文所描述的示例環(huán)境使用硬磁盤539、可移動磁盤529和可移動光盤531,還可使用用于儲存數(shù)據(jù)的其它類型的計算機可讀介質(zhì),包括磁帶盒、閃存卡、數(shù)字多功能盤、貝努利盒式磁帶、RAM、ROM等等。
包含一個或多個程序模塊的程序代碼手段,包括操作系統(tǒng)535、一個或多個應(yīng)用程序536、其它程序模塊537以及程序數(shù)據(jù)538,可存儲于硬盤539、磁盤529、光盤531、ROM 524或RAM 525中。用戶可以通過鍵盤540、定位設(shè)備542或諸如話筒、操縱桿、游戲墊、掃描儀等其它輸入設(shè)備(未圖示),來將命令和信息輸入到計算機系統(tǒng)520。這些及其它輸入設(shè)備可通過耦合到系統(tǒng)總線523的輸入/輸出接口546連接到處理單元521。輸入/輸出接口546邏輯上代表各種不同的接口中的任意一種,諸如串行端口接口、PS/2接口、并行端口接口、通用串行總線(“USB”)接口、或電氣與電子工程師協(xié)會(“IEEE”)1394接口(即,火線接口),或者甚至可邏輯上代表不同接口的組合。
監(jiān)視器547或其它顯示設(shè)備通過視頻接口548也連接到系統(tǒng)總線523。諸如揚聲器和打印機等其它外圍設(shè)備(未圖示)也可連接至計算機系統(tǒng)420。
計算機系統(tǒng)520可連接到各種網(wǎng)絡(luò),諸如辦公室范圍或企業(yè)范圍的計算機網(wǎng)絡(luò)、家庭網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和/或因特網(wǎng)。計算機系統(tǒng)520可通過此類網(wǎng)絡(luò)與諸如遠程計算機系統(tǒng)、遠程應(yīng)用程序和/或遠程數(shù)據(jù)庫等外部源交換數(shù)據(jù)。
計算機系統(tǒng)520包括網(wǎng)絡(luò)接口553,通過此接口計算機系統(tǒng)520從外部源接收數(shù)據(jù),和/或發(fā)送數(shù)據(jù)到外部源。如圖5中所示,網(wǎng)絡(luò)接口553便于通過鏈路551與遠程計算機系統(tǒng)583交換數(shù)據(jù)。網(wǎng)絡(luò)接口553邏輯上可以表示一個或多個軟件和/或硬件模塊,諸如網(wǎng)絡(luò)接口卡和對應(yīng)的網(wǎng)絡(luò)驅(qū)動程序接口規(guī)范(“NDIS”)棧。鏈路551表示網(wǎng)絡(luò)的一部分(例,以太網(wǎng)段),遠程計算機系統(tǒng)583表示該網(wǎng)絡(luò)的一個節(jié)點。
類似地,計算機系統(tǒng)520包括輸入/輸出接口546,通過該接口計算機系統(tǒng)520從外部源接收數(shù)據(jù)和/或向外部源發(fā)送數(shù)據(jù)。輸入/輸出接口546經(jīng)由鏈路559耦合到調(diào)制解調(diào)器554(例如,標準調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器或數(shù)字用戶線(“DSL”)調(diào)制解調(diào)器),通過調(diào)制解調(diào)器計算機系統(tǒng)520從外部源接收數(shù)據(jù)和/或向外部源發(fā)送數(shù)據(jù)。如圖5中所示,輸入/輸出接口546和調(diào)制解調(diào)器554便于通過鏈路552與遠程計算機系統(tǒng)593交換數(shù)據(jù)。鏈路552表示網(wǎng)絡(luò)的一部分,遠程計算機系統(tǒng)593表示該網(wǎng)絡(luò)的一個節(jié)點。
盡管圖5表示本發(fā)明的一個合適的操作環(huán)境,然而本發(fā)明的原理可在能夠?qū)崿F(xiàn)本發(fā)明原理的任何系統(tǒng)(若有必要,可進行適當修改)中使用。圖5中所示的環(huán)境只是示例性的,決非代表眾多的可在其中實現(xiàn)本發(fā)明原理的環(huán)境的即使一小部分。
根據(jù)本發(fā)明,包括消息處理器示例和時鐘以及包括交互ID、消息ID、TTL值、實例ID、計數(shù)、數(shù)據(jù)和交互高速緩存在內(nèi)的相關(guān)聯(lián)數(shù)據(jù),可存儲在與計算機系統(tǒng)520相關(guān)聯(lián)的任意計算機可讀介質(zhì)中,并可從這些介質(zhì)被訪問。例如,部分此類模塊和部分相關(guān)聯(lián)的程序數(shù)據(jù)可包括在操作系統(tǒng)535、應(yīng)用程序536、程序模塊537和/或程序數(shù)據(jù)538中,以在系統(tǒng)存儲器522中存儲。
當諸如磁硬盤539等大容量存儲設(shè)備耦合至計算機系統(tǒng)520,此類模塊和相關(guān)聯(lián)的程序數(shù)據(jù)也可存儲在該大容量存儲設(shè)備中。在聯(lián)網(wǎng)環(huán)境中,相對于計算機系統(tǒng)520所描繪的程序模塊或其部分,可存儲在遠程存儲設(shè)備中,諸如與遠程計算機系統(tǒng)583和/或遠程計算機系統(tǒng)593相關(guān)聯(lián)的系統(tǒng)存儲器和/或大容量存儲設(shè)備。可在如前所述的分布式環(huán)境下執(zhí)行此類模塊。
本發(fā)明能以其它具體形式實現(xiàn)而不會偏離其精神和本質(zhì)特征。在任何方面所述的實施例均僅被視為示例性的,而非限制性的。因而,本發(fā)明范圍由所附權(quán)利要求書而非之前的描述所指示。落入權(quán)利要求書的等效技術(shù)方案的意義和范圍內(nèi)的所有改變將被包含在它們的范圍中。
權(quán)利要求
1.在網(wǎng)絡(luò)上可與一個或多個其它計算機系統(tǒng)一起連接到網(wǎng)絡(luò)的目的地計算機系統(tǒng)處,所述目的地計算機系統(tǒng)和所述其它計算機系統(tǒng)中的至少一個具有同步的時鐘頻率,一種可靠地處理消息的方法,所述方法包括接收具有消息ID和TTL值的消息的第一副本的動作,所述消息ID標識所述消息在一消息源和所述目的地計算機系統(tǒng)之間的交互中的位置,所述TTL值指示所述消息將何時到期;更新交互高速緩存以指示已經(jīng)收到所述消息的動作;在處理了所述消息的第一副本以后接收所述消息的第二副本的動作,所述消息的第二副本具有所述消息ID;以及基于指示先前已經(jīng)處理過具有所述消息ID的消息的交互高速緩存棄置所述消息的第二副本的動作。
2.如權(quán)利要求1所述的方法,其特征在于,接收消息的第一副本的動作包括接收包括所述消息ID、交互ID、所述TTL值和應(yīng)用程序數(shù)據(jù)的消息第一副本的動作,所述交互ID標識所述消息源和所述目的地計算機系統(tǒng)之間的一特定交互,所述消息源和目的地計算機系統(tǒng)的時鐘頻率是同步的。
3.如權(quán)利要求2所述的方法,其特征在于,更新交互高速緩存以指示已經(jīng)收到所述消息的動作包括將所述消息ID和所述交互ID存儲到所述交互高速緩存中的動作。
4.如權(quán)利要求1所述的方法,其特征在于,還包括在處理所述消息之后向所述消息源發(fā)送收到所述消息的確認的動作。
5.如權(quán)利要求1所述的方法,其特征在于,接收所述消息的第二副本的動作包括在基于所述TTL值的倒數(shù)計時器到期之前接收所述消息的第二副本的動作。
6.如權(quán)利要求1所述的方法,其特征在于,接收所述消息的第二副本的動作包括在基于所述TTL值的倒數(shù)計時器到期之后接收所述消息的第二副本的動作。
7.如權(quán)利要求1所述的方法,其特征在于,基于所述交互高速緩存棄置所述消息的第二副本的動作包括判定所述第二消息中所包括的消息ID和交互ID是存儲在所述交互高速緩存中的動作。
8.如權(quán)利要求1所述的方法,其特征在于,所述目的地計算機系統(tǒng)包括Web服務(wù)器,并且所述消息源是Web瀏覽器。
9.如權(quán)利要求1所述的方法,其特征在于,還包括向所述消息源發(fā)送包括加密的會話密鑰的令牌的動作,所述會話密鑰是用一公鑰/私鑰對中的私鑰來加密的,所述會話密鑰用于保護所述消息源和所述目的地計算機系統(tǒng)之間的交互。
10.如權(quán)利要求9所述的方法,其特征在于,在已從所述交互高速緩存中移除所述交互之后接收所述安全令牌的動作;解密所述令牌以揭示所述會話密鑰的動作;以及即使在已從所述交互高速緩存中移除所述交互的情況下仍使用所述會話密鑰來保護所述交互的動作。
11.在網(wǎng)絡(luò)上可與一個或多個其它計算機系統(tǒng)一起連接到網(wǎng)絡(luò)的目的地計算機系統(tǒng)處,所述目的地計算機系統(tǒng)和所述其它計算機系統(tǒng)中的至少一個具有同步的時鐘頻率,一種可靠地處理消息的方法,所述方法包括接收具有交互ID、消息ID和TTL值的消息的第一副本的動作,所述消息ID標識所述消息在所述交互ID所指定的交互中的位置,所述TTL值指示所述消息何時將到期;在基于所述TTL值的倒數(shù)計時器到期之后從交互高速緩存中至少移除所述消息ID的動作;在從所述交互高速緩存中移除所述消息ID之后接收所述消息的第二副本的動作;向消息源發(fā)送對所述交互ID的進度的指示的請求的動作,所述消息源具有與所述目的地計算機系統(tǒng)的時鐘頻率同步的時鐘頻率;接收所述交互已經(jīng)進展到可棄置具有所述消息ID的消息的指示的動作;以及棄置所述消息的第二副本的動作。
12.如權(quán)利要求11所述的方法,其特征在于,還包括從所述消息源接收所述消息的第一副本的動作,所述消息的第一副本包括應(yīng)用程序數(shù)據(jù);以及向?qū)?yīng)的消息處理器實例傳送所述應(yīng)用程序數(shù)據(jù)的動作。
13.如權(quán)利要求11所述的方法,其特征在于,還包括更新所述交互高速緩存以指示在從所述交互高速緩存移除所述消息ID之前已經(jīng)收到所述消息的動作。
14.如權(quán)利要求11所述的方法,其特征在于,從交互高速緩存至少移除所述消息ID的動作包括在不終止對所述交互的參與的情況下,遺忘由所述交互ID指定的交互的進度的動作。
15.如權(quán)利要求11所述的方法,其特征在于,還包括在處理所述消息以后向所述消息源發(fā)送已經(jīng)收到所述消息的確認的動作。
16.如權(quán)利要求11所述的方法,其特征在于,從所述交互高速緩存移除所述消息ID的動作包括檢測所述交互ID所標識的交互已經(jīng)空閑了一指定時間段。
17.如權(quán)利要求11所述的方法,其特征在于,從所述交互高速緩存移除所述消息ID的動作包括移除所述交互ID所指定的整個交互。
18.如權(quán)利要求11所述的方法,其特征在于,還包括在收到所述消息的第二副本之后,檢測所述交互高速緩存不包括由所述消息的第二副本中所包括的交互ID所標識的交互的消息ID的動作。
19.如權(quán)利要求11所述的方法,其特征在于,向所述消息源發(fā)送對所述交互ID的進度的指示的請求包括發(fā)送REQACKACK的動作。
20.如權(quán)利要求21所述的方法,其特征在于,發(fā)送REQACKACK的動作包括發(fā)送包括一個或多個所述交互ID和一實例ID的REQACKACK的動作。
21.如權(quán)利要求11所述的方法,其特征在于,接收所述交互已經(jīng)進展到可棄置具有所述消息ID的消息的指示的動作包括從所述消息源接收ACKACK的動作,所述ACKACK包括所述消息ID和所述交互ID。
22.如權(quán)利要求11所述的方法,其特征在于,接收所述交互已經(jīng)進展到可棄置具有所述消息ID的消息的指示的動作包括接收ACKACK的動作,所述ACKACK還指示一個或多個附加消息ID在所述消息源處已經(jīng)超時且不再需要確以。
23.如權(quán)利要求11所述的方法,其特征在于,接收所述交互已經(jīng)進展到可棄置具有所述消息ID的消息的指示的動作包括接收涉及所述交互的進度信息的動作,從而即使先前已從所述交互高速緩存移除了所述交互的進度,所述目的地計算機系統(tǒng)仍可參與所述交互。
24.如權(quán)利要求11所述的方法,其特征在于,接收所述交互已經(jīng)進展到可棄置具有所述消息ID的消息的指示的動作包括接收包括所述消息ID、交互ID和安全令牌的ACKACK的動作。
25.如權(quán)利要求11所述的方法,其特征在于,棄置所述消息的第二副本的動作包括判定所述第二消息中所包括的消息ID和交互ID與所述ACKACK中的消息ID和交互ID相匹配。
26.如權(quán)利要求11所述的方法,其特征在于,所述目的地計算機系統(tǒng)包括Web服務(wù)器,并且所述消息源是Web瀏覽器。
27.在網(wǎng)絡(luò)上可與一個或多個其它計算機系統(tǒng)一起連接到網(wǎng)絡(luò)的目的地計算機系統(tǒng)處,一種可靠地處理消息的方法,所述方法包括從消息源接收消息的第一副本的動作,所述消息的第一副本與一已設(shè)立實例ID相關(guān)聯(lián);在被初始化成具有所述已設(shè)立實例ID的消息處理器實例處處理所述消息的第一副本的動作;檢測所述目的地計算機系統(tǒng)使用的存儲器內(nèi)容被無意地丟失的動作;將所述消息處理器實例重新初始化成具有與所述已設(shè)立實例ID不同的更新的實例ID的動作;在重新初始化所述消息處理器實例之后接收所述消息的第二副本的動作,所述消息的第二副本與所述已設(shè)立實例ID相關(guān)聯(lián);以及因為所述消息的第二副本對應(yīng)于與所述更新的實例ID不同的實例ID而拒收所述消息的第二副本的動作。
28.如權(quán)利要求27所述的方法,其特征在于,接收消息的第一副本的動作包括接收包括所述已設(shè)立實例ID的消息的第一副本的動作。
29.如權(quán)利要求27所述的方法,其特征在于,接收消息的第一副本的動作包括接收所述消息的第一副本的動作;向所述消息源發(fā)送REQACKACK的動作;以及接收包括所述已設(shè)立實例ID的ACKACK的動作。
30.如權(quán)利要求27所述的方法,其特征在于,在消息處理器實例處處理所述消息的第一副本的動作包括判定與所述第一消息相關(guān)聯(lián)的已設(shè)立實例ID是所述消息處理器實例的當前實例ID的動作。
31.如權(quán)利要求27所述的方法,其特征在于,在消息處理器實例處處理所述消息的第一副本的動作包括向所述消息處理器實例傳送所述消息中包含的應(yīng)用程序數(shù)據(jù)的動作。
32.如權(quán)利要求27所述的方法,其特征在于,檢測所述目的地計算機系統(tǒng)使用的存儲器內(nèi)容被無意地丟失的動作包括檢測交互高速緩存的內(nèi)容被丟失。
33.如權(quán)利要求27所述的方法,其特征在于,將所述消息處理器實例重新初始化成具有更新的實例ID的動作包括生成更新的實例ID。
34.如權(quán)利要求27所述的方法,其特征在于,接收所述消息的第二副本的動作包括接收包括所述已設(shè)立實例ID的消息的第二副本的動作。
35.如權(quán)利要求27所述的方法,其特征在于,接收所述消息的第二副本的動作包括接收所述消息的第二副本的動作;向所述消息源發(fā)送REQACKACK的動作;以及接收包括所述已設(shè)立實例ID的ACKACK的動作。
36.如權(quán)利要求27所述的方法,其特征在于,拒收所述消息的第二副本的動作包括判定所述已設(shè)立實例ID和所述更新的實例ID不同的動作。
37.如權(quán)利要求27所述的方法,其特征在于,還包括使所述消息中的交互ID所標識的交互失敗的動作。
38.如權(quán)利要求27所述的方法,其特征在于,所述目的地計算機系統(tǒng)包括Web服務(wù)器,并且所述消息源是Web瀏覽器。
39.在網(wǎng)絡(luò)上可與一個或多個其它計算機系統(tǒng)一起連接到網(wǎng)絡(luò)的源計算機系統(tǒng)處,其中所述源計算機系統(tǒng)和所述其它計算機系統(tǒng)中的至少一個具有同步的時鐘頻率,一種可靠地處理消息的方法,所述方法包括向具有與所述源計算機系統(tǒng)的時鐘頻率同步的時鐘頻率的消息目的地發(fā)送具有交互ID、消息ID和TTL值的消息第一副本的動作,所述消息ID標識所述消息在所述交互ID所指定的交互中的位置,且所述TTL值指示所述消息何時將到期;在發(fā)送所述消息的第一副本之后向所述消息目的地發(fā)送所述消息的第二副本的動作,所述消息的第二副本具有所述交互ID、所述消息ID和更新的TTL值,所述更新的TTL值是從所述TTL值以及從發(fā)送所述消息的第一副本起已經(jīng)過去的時間計算得出的;檢測所述消息不再需要確認的動作;以及更新交互高速緩存以指示所述消息不再需要確認的動作。
40.如權(quán)利要求39所述的方法,其特征在于,還包括基于所述TTL值設(shè)置消息計時器持續(xù)時間的動作。
41.如權(quán)利要求39所述的方法,其特征在于,發(fā)送所述消息的第二副本的動作包括以重新發(fā)送間隔來發(fā)送所述消息的第二副本。
42.如權(quán)利要求39所述的方法,其特征在于,還包括在發(fā)送所述消息的第二副本之后發(fā)送所述消息的至少一個額外副本的動作,所述消息的每個額外副本包括所述交互ID、所述消息ID和對應(yīng)的TTL值,每個對應(yīng)的TTL值是從緊接著的前一個對應(yīng)TTL值和從發(fā)送所述消息的緊接著的前一個副本開始已經(jīng)過去的時間計算得出的。
43.如權(quán)利要求39所述的方法,其特征在于,檢測所述消息不再需要確認的動作包括從所述消息目的地接收對所述消息的確認的動作。
44.如權(quán)利要求39所述的方法,其特征在于,檢測所述消息不再需要確認的動作包括檢測基于所述TTL值的消息計時器持續(xù)時間已經(jīng)到期的動作。
45.如權(quán)利要求39所述的方法,其特征在于,更新交互高速緩存以指示所述消息不再需要確認的動作包括將所述消息ID和交互ID存儲到所述交互高速緩存中。
46.如權(quán)利要求39所述的方法,其特征在于,還包括從所述消息目的地接收REQACKACK的動作,所述REQACKACK請求所述交互ID所標識的交互的進度;以及發(fā)送指示所述交互已經(jīng)進展至所述消息ID所標識的消息的ACKACK,從而使所述消息目的地知道所述消息不需要確認的動作。
47.如權(quán)利要求39所述的方法,其特征在于,所述源計算機系統(tǒng)包括Web瀏覽器,并且所述消息目的是Web服務(wù)器。
48.如權(quán)利要求39所述的方法,其特征在于,還包括發(fā)送指示即使從未收到對所述消息的確認,所述消息也不再需要確認的ACKACK的動作。
49.如權(quán)利要求39所述的方法,其特征在于,還包括從消息目的地接收令牌的動作,所述令牌包括用一公鑰/私鑰對中的私鑰加密的加密會話密鑰,所述會話密鑰用于保護所述消息目的地和所述源計算機系統(tǒng)之間的交互;用所述公鑰/私鑰對中的公鑰解密所述令牌以揭示所述會話密鑰的動作;以及用所揭示的會話密鑰來保護向所述消息目的發(fā)送的后續(xù)通信的動作。
50.如權(quán)利要求49所述的方法,其特征在于,還包括響應(yīng)于REQACKACK接著向所述消息目的地發(fā)送所收到的令牌的動作,從而使所述消息目的能夠與所述源計算機系統(tǒng)建立安全環(huán)境。
全文摘要
本發(fā)明涉及使用具有同步頻率的時鐘的可靠消息通信的方法、系統(tǒng)和計算機程序產(chǎn)品。本發(fā)明的實施例確保至多一次(at-most-once)的消息傳送。源和目的地使用具有同步頻率的時鐘。給消息分配存活時間(Time-To-Live)(“TTL”)值,從而當基于TTL值的對應(yīng)消息計時器到期,則狀態(tài)消息在源處得到更新,并且在目的地處被移除。據(jù)此,在目的地處維護狀態(tài)信息所消耗的資源可在較短時間周期內(nèi)被釋放。如果有關(guān)狀態(tài)信息被移除,則源可以向消息目的地重新發(fā)送狀態(tài)信息。當消息目的地遭受無意的存儲丟失時,消息處理器實例ID確保最多一次傳送。當TTL值無限且不使用實例ID時,本發(fā)明的實施例還可用于例如恰好一次傳送(exactly-once-delivery)。
文檔編號H04L12/58GK1753391SQ200510113308
公開日2006年3月29日 申請日期2005年9月21日 優(yōu)先權(quán)日2004年9月21日
發(fā)明者D·E·朗沃斯, G·K·R·卡基韋亞 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1