通过请求-响应传输的可靠的请求-响应消息通信的制作方法

文档序号:7952119阅读:207来源:国知局
专利名称:通过请求-响应传输的可靠的请求-响应消息通信的制作方法
技术领域
本发明涉及用于使用请求-响应传输来可靠地传递消息的系统、方法和计算机程序。
背景技术
由于计算机化的系统越来越流行,同样越来越需要在大型和小型网络中分布计算机系统的文件和处理资源。一般而言,计算机系统和相关设备为各种原因而通过网络传递信息,例如,为交换个人电子消息、销售商品、提供帐户信息等。然而,可以理解,由于计算机系统及其相关应用程序变得越来越复杂,也增加了与在网络上共享数据和资源相关联的挑战。
一般而言,存在用于在两台或多台计算机系统之间分布文件和资源的多种不同的机制和协议。例如,可以用不必要求其它计算机系统响应的方式将消息从一个计算机系统发送给一个或多个其它计算机系统。对此的一个示例可以是无连接协议,诸如可用于发送电子邮件消息,或使用用户数据报协议(“UDP”)将某些内容流传送至其它计算机。用于共享文件或资源的其它方法可包括,使用面向连接的协议,诸如使用传输控制协议(“TCP”)的协议。面向连接的通信一般涉及通过一连串请求和响应以及通过共享某些连接状态信息来建立连接。从计算机发送或从中接收的数据一般含有将发送的数据与连接相关联的某些元素。
对某些应用程序,面向连接的通信相比无连接通信具有多个优点。例如,使用TCP启动的连接提供用于确保在一端接收到所有的数据以及一定量的纠错的多个功能。例如,发送计算机可以发送分组,指示该分组为20个分组中的第一个。当接收计算机在该连接会话中接收所有20个分组之后,它向发送计算机系统提交确认(即“ack”)以指示接收了所有20个分组。在某些情况中,接收计算机系统甚至可以为其所接收的每一分组发送确认。在使用可靠消息消息通信(“RM”)机制的情况中,如果发送计算机系统没有接收到对每一分组的确认,或对所有20个分组的确认,那么发送计算机系统可以再次发送整条消息,或如果有必要,甚至可以重新发送各个分组给接收计算机。
同样,诸如超文本传输协议(“HTTP”)和文件传输协议(“FTP”)等多种不同的组帧协议各自都叠加在面向连接的传输协议之上,以利用前述这些属性中的一个或多个。例如,当客户计算机使用HTTP来检索信息时,客户计算机建立与web服务器的TCP连接,并发送对诸如HTML文件或图象等资源的HTTP请求,或请求web服务器采取某一动作,例如,在其中客户机可要求web服务器在线购买歌曲并将其发送给客户机的在线商务的情况中。web服务器接收该请求,并提供相应的响应,该响应可包含所请求文件的内容。当接收所请求的文件之后,或当客户计算机决定与web服务器的通信已完成时,客户计算机可以关闭该TCP连接。由此,从服务的观点来看,客户机不必是可寻址的。例如,客户机可以位于在网络地址翻译(NAT)服务器之后,或利用HTTP代理服务器来跨过防火墙建立连接。另一个好处是,请求和响应可以容易地相关,每一响应与其之前的请求相关。
尽管请求-响应机制有这些和其它优点,但是一般不存在请求或响应计算机了解信息是否被成功传送的特定方式。例如,请求可能已到达服务器,服务器可能已生成响应,但由于HTTP代理服务器出错而丢失该响应。从而,在常规的请求-响应机制中,请求计算机系统在从其它计算机系统中没有接收到响应的情况下往往会重发该请求。例如,常规web浏览器通常提供可用于在不能下载网页时重试HTTP请求的“刷新”按钮。在某些情况中,诸如使用对因特网网页的简单请求,重复表面上已失败的请求正常地不会有有害的影响。在其它情况中,诸如使用非幂运算,重复表面上已失败的请求,或重发看上去没有被正确发送的消息可能会有累积的影响,这有可能是有害的。例如,客户计算机可由于没有从银行服务器接收到指示原始的汇款成功的响应而向该银行服务器重发汇款请求。响应的缺失不必是指示请求没有被接收或处理。例如,可能已经接收并处理了请求,但由于暂时的网络断开或HTTP代理服务器故障而丢失了响应。该银行从而可能在重试请求之后将汇款的数量翻倍,尽管这不是客户机的意图。
诸如此类的困难在其中响应计算机系统(例如,银行服务器)不能与请求计算机系统(例如,客户机银行顾客)直接通信以了解请求的状态的连接中尤其尖锐。例如,客户计算机系统可在连接中匿名通信,或可以位于在防火墙之后,或可服从网络地址翻译(“NAT”)服务。在诸如此类的情况中,一般仅有客户机(即请求)计算机系统才能启动通信。在响应计算机系统(例如,网络服务器)想要向请求者发送接收确认和响应重发的情况中,可能会对响应计算机系统造成困难。具体地,在常规的请求-响应协议中,目前没有用于确保两个或多个计算机系统之间的可靠消息传送的有效机制,尤其是当影响不应被累积时不累积消息的影响且允许消息仅以所期望的特定顺序处理的机制。
从而,确保可靠的请求-响应机制的系统、方法或计算机程序产品将成为本领域中的优势。具体地,可以使用允许在网络连接的请求和响应计算机系统之间的有效请求和响应消息以及对其的相应确认的请求-响应机制来实现该优势。此外,可以用在无论请求计算机的地址是否可被标识,在地址难以确定或无法确定的连接中,或在从服务器无法连接这样的地址的情况中都可实现的有效的请求-响应机制来实现该优势。

发明内容
本发明使用被配置成确保请求-响应环境中的可靠消息通信的系统、方法和计算机程序产品解决了现有技术中的一个或多个前述问题。具体地,本发明的实现部分地涉及这样一种特定请求和响应机制,该机制在响应计算机系统上施加约束,用于仅以预期的方式处理由请求计算机系统发送的消息。
例如,从请求计算机系统的观点来看的一种方法包括建立与响应计算机系统的端对端连接。在一种实现中,使用指示处理在响应计算机系统处如何发生的连接契约来建立该端对端连接。该方法也包括向响应计算机系统发送第一消息,其中第一消息包含第一标识符。从请求计算机系统的观点来看,该方法也包括从响应计算机系统接收响应消息。
另外,当适当地确认了所有请求和响应消息之后,从请求计算机系统的观点来看,该方法也包括发送连接终止消息给响应计算机系统。在一种实现中,该终止消息可包含终止消息标识符,以及表示已经接收到由响应计算机系统发送的所有响应消息的确认。之后,当请求计算机系统接收到关于该终止消息标识符的终止响应消息时,该端对端连接终止。
与此形成对比,从响应计算机系统的观点来看的一种方法包括接受与该请求计算机系统的端对端连接。在一种实现中,这也涉及指导处理所接收到的消息的方式的契约。从响应计算机系统的观点来看,该方法也包括从请求计算机系统接收第一消息,其中该第一消息包含第一标识符。该响应计算机系统然后向请求计算机系统发送响应消息。
当由请求计算机系统接收所有适当的响应消息之后,响应计算机系统从请求计算机系统接收连接终止消息。该终止消息一般包含终止消息标识符,以及表示已经接收所有响应消息的来自请求计算机系统的确认。响应计算机系统然后发送关于该终止消息标识符的终止响应消息。从而,请求和响应计算机系统均在该端对端连接中确认了特定消息的接收。
本发明的示例性实现的其它特征和优点将在随后的描述中描绘,且其中部分可通过阅读该描述而变得明显,或者可以通过实现本发明来领会。这样的实现的特征和优点可以通过所附权利要求书中特别指出的装置及其组合来实现和获取。通过阅读以下描述和所附权利要求书,这些和其它特征将是显而易见的,或者也可以通过如之后所述对本发明的实现来领会。


为了描述可获取本发明的上述及其它优点和特征的方式,将通过参考在附图中示出的特定实施例来呈现对以上简要描述的本发明的更具体的描述。可以理解,这些附图仅描述本发明的典型实施例,从而不应被认为是对本发明的范围的限制,本发明将通过使用附图以附加的特性和细节来描述和说明,附图中图1示出了根据本发明的请求-响应序列,其中由请求计算机系统发送的消息由响应计算机系统适当地确认;图2示出了根据本发明的请求-响应序列,其中来自响应计算机系统的至少一条响应消息失败;图3示出了根据本发明的请求-响应序列,其中由请求计算机系统发送的至少一条请求消息失败;图4示出了根据本发明,从请求计算机观点和从响应计算机观点来看,用于以可靠的请求-响应方式传递消息和响应并交换确认的方法;以及图5示出了用于实现本发明的一个或多个实现的合适的计算环境。
具体实施例方式
本发明提供了被配置成在请求-响应环境中确保可靠消息通信的系统、方法和计算机程序产品。具体地,本发明的实现部分地涉及这样一种特定请求-响应机制,该机制在响应计算机系统上施加约束以仅以所预期的方式处理由请求计算机系统发送的消息。
从本发明的说明书和权利要求书中可以理解,本发明的一方面涉及在请求计算机系统和响应计算机系统之间建立唯一标识来自两个计算机系统的消息的端对端的连接。本发明的另一方面涉及向响应计算机系统发送请求消息,随后是来自响应计算机系统的响应消息。响应计算机系统确认来自请求计算机系统的请求消息,而请求计算机系统确认来自响应计算机系统的响应消息。本发明的又一方面涉及以同样实现来自响应计算机系统的终止确认消息的方式来终止通信。
例如,图1示出了根据本发明的请求-响应序列,其中由请求计算机系统100发送的所有消息都被响应计算机系统105适当地确认,反之亦然。一般而言,此处描述的端对端连接可以叠加在诸如TCP等提供请求-响应交互的任何类型的网络连接之上,其上是诸如HTTP等分层的请求-响应组帧协议。当然,存在根据本发明可实现的其它请求-响应传输和组帧协议。
在任何情况中,图1示出请求计算机系统100通过发送连接启动请求消息110“创建序列[提供=A]”给响应计算机系统105来启动端对端连接。该端对端连接可以持久保存在一个或多个底层网络连接上,使得同一时间在请求计算机系统100和响应计算机系统105之间可存在一个或多个传输连接,它们使用端对端连接标识符来区分。请求消息110包括可由响应计算机系统105用于该端对端连接中的所有消息的标识“A”。图1也示出了响应计算机系统105对已建立的连接以响应120“创建序列响应[B]”来接受该连接。响应消息120包括标识“B”,它可由请求计算机系统100用于其在该已建立的端对端连接中发送的所有消息。
当在请求计算机系统100和响应计算机系统105之间建立端对端连接或在此之前,这两台计算机也可以设置连接“契约”。例如,连接请求消息110可包括连接契约的标识(未示出),它是在消息120中的达成一致的。连接契约可包括可为任何数量的端点配置的任何数量的指令。例如,在一个实现中,连接契约要求由响应计算机系统105接收的每一消息被处理“正好一次”、或“至多一次”或“至少一次”。
在另一实现中,连接契约指示处理以有序的方式,或仅当请求计算机系统100确认对来自响应计算机系统105的所有响应消息的接收之后发生。例如,可要求响应计算机系统105高速缓存所有接收到的消息;并当(无论以何种顺序)接收到所有消息并由请求计算机系统100适当地确认之后,响应计算机系统105然后才能以特定的顺序处理所接收的消息。响应计算机系统105然后准备将在稍后由请求计算机系统100拉取(pull)的响应。
当建立了端对端连接(及相关契约)之后,请求计算机系统100向响应计算机系统105发送该端对端连接的第一消息130。第一消息130“序列[B,1]ID[α]”包含标识符“B”,这是由响应计算机系统105在消息120中提供的。消息130也包括对第一消息130的序数“1”(即,“B,1”),以及单独的第一标识符“α”。除第一消息130的相对序数“1”之外,第一标识符“α”唯一地标识消息130。当接收到第一消息130之后,响应计算机系统发送响应消息140“序列[A,1],确认[B1-1],关于[α]”,它关于第一标识符“α”并包含确认“确认[B1-1]”,它指示哪一条请求消息已被响应计算机系统105接收。
在一个实现中,诸如当请求和响应在通信栈的传输层上相关时,响应消息140仅可在用于传递第一消息130的传输连接的回复支路上发送给请求计算机系统100。在另一实现中,诸如当请求和响应在通信栈的消息层上相关时,响应消息140仅可在由请求计算机系统100建立的任何传输连接的回复支路上返回给请求计算机系统100。这在一种实现中是可能的,因为在消息通信层相关的消息可包含请求计算机系统100的某些相关信息,这允许请求计算机系统100将响应消息与它之前发送的请求消息进行匹配。例如,来自响应计算机系统105的回复消息可能失败,且附加在之后的回复上的后继确认可指示实际接收了之前的请求。同样,请求计算机系统100可以为最后的回复发送确认,指示之前的回复丢失。响应计算机系统105可以使用从请求计算机系统100接收到的确认消息的回复支路来重发回复消息,并在消息中提供相关信息(例如,“关于[α]”)。
在任何情况中,图1示出了响应消息140包含标识“A,1”,指示消息140是由响应计算机系统105为已建立的端对端连接(“A”)发送的第一条消息(“1”)。响应消息140也包含确认“确认[B1-1]”,它确认响应计算机系统105含有在由请求计算机系统100使用的端对端连接标识符“B”上发送的消息1至1。响应消息140也指示消息140关于(即,“关于”)第一标识符“α”,它向请求计算机系统100指示,消息140是对第一请求消息(即“ID[α]”)的响应。
请求计算机系统100也发送第二消息150“序列[B,2,最后],确认[A1-1]ID[β]”。第二消息150包含标识“B,2”,它指示消息150是由计算机系统100在其已建立的端对端连接的标识符(即,“B”)上发送的第二条消息。第二消息150也包含标识符“最后”,指示消息150是由计算机系统100在其已建立的端对端的标识符“B”上发送的应用程序消息中的最后一条。第二消息150还包含确认“确认[A,1-1]”,它向响应计算机系统105确认,请求计算机系统100已接收到回复消息140。另外,第二消息150包含特别标识消息150的第二标识符“β”,而无论该消息在发送该消息的序列中的序数是什么(即,“B,1”、“B,2”等)。
同样,图1示出了响应计算机系统105接收消息150,并以响应消息160“序列[A,2,最后],确认[B,1-2],关于[β]”回复。响应消息160包含标识“A,2,最后”,指示消息160是由响应计算机系统105以其已建立端对端连接的标识符“A”发送的第二条确认消息;且消息160是在接收计算机系统的已建立端对端连接的标识符(“A”)上发送的“最后”一条消息。响应消息160还包含确认“确认[B,1-2]”,标识响应计算机系统105已在由请求计算机系统100使用的端对端连接标识符(“B”)上接收顺序编号的消息1至2。另外,响应消息160包括第二标识符“β”,它向请求计算机系统100指示,这是对之前发送的第二请求消息150(即,“ID[β]”)的响应。
当接收到响应消息160之后,请求计算机系统100确定成功地结束了消息交换,并启动终止该已建立的端对端连接的步骤。具体地,图1示出请求计算机系统100发送连接终止消息170“终止[B],确认[A,1-2]ID[γ]”。连接终止消息170包括标识终止的端对端连接的标识符“B”,也包含确认“确认[A,1-2]”。确认“确认[A,1-1]”指示请求计算机系统100已经从响应计算机系统105接收到了第一和第二响应消息(即,140、160)。连接终止消息170也包含终止消息标识符“γ”,它唯一标识了消息170。
响应计算机系统105以终止响应消息180“终止[A],关于[γ]”回复。响应确认180包括指示终止哪个端对端连接的标识符“A”。响应确认180也包含指示该确认“关于”终止消息标识符“γ”的指示。这可用于向请求计算机系统100证实响应计算机系统105的确接收到特定的连接终止消息180。因此,图1示出了请求计算机系统100和响应计算机系统105不仅仅提供对所接收到的一个或一组消息的普通确认。具体地,建立的端对端连接中的请求和响应计算机系统可以提供丰富的消息信息以及处理的某种顺序,这些消息信息可用于将特定消息与这些消息的特定确认相关。
图2示出了类似于图1的请求-响应情形,不同之处在于来自响应计算机系统105的响应消息之一失败。具体地,图2示出了请求计算机系统100和响应计算机系统105使用实际上类似于图1的消息110和120的消息200和210建立端对端连接。在建立了端对端连接之后,请求计算机系统100发送第一请求消息220“序列[B,1],ID[α]”,它实际上类似于图1的消息130,且包含第一标识符“α”。图2也示出响应计算机系统105发送响应消息240“序列[A,1],确认[B,1-1]关于[α]”,尽管图2示出消息240没有到达请求计算机系统100。
在接收任何其它响应消息之前,请求计算机系统100发送第二请求消息230“序列[B,2,最后],ID[β]”,除了消息230不包含任何确认(例如,“确认[##]”)之外,它实际上与图1的消息150类似。具体地,消息230向响应计算机系统105指示,请求计算机系统100没有接收到响应消息(即,消息240a没有被接收),即使响应计算机系统105发送了该响应消息。尽管如此,响应计算机系统105以响应消息250“序列[A,2],确认[B,1-2]关于[β]”来响应于消息230。消息250指示它是来自响应计算机系统105的第二条消息(即,“A,2”),且响应计算机系统105已经接收到从请求计算机系统100顺序发送的两条消息(即,“B1-2”)。消息250包含第二标识符“β”,它向请求计算机系统100指示消息250是对第二请求消息230(即,“ID[β]”)的响应。
接收到消息250之后,请求计算机系统100认识到响应计算机系统105相信它已经回复了消息220和230两者,因为消息250被标识为序列中的第二消息(即,“序列[A,2]”)。然而,因为请求计算机系统100从未接收来自响应计算机系统105的关于第一标识符“α”的特定响应消息(即,没有接收消息240),所以请求计算机系统100重新发送消息260“序列[B,1],确认[A,2],ID[α]”。在某些方面,消息260仅是消息220的副本,因为它包含指示这是由请求计算机系统100发送的序列中的第一消息的标识符“B,1”,且因为消息260包含第一标识符“α”。尽管如此,消息260在其它方面是独特的,因为它包含确认“确认[A,2]”(而不是“A,1-2”),这告知响应计算机系统105仅接收到响应消息250“A,2”(而不是消息240“A,1”和250“A,2”两者)。
当接收消息260时,响应计算机系统105不必重新处理标识为“α”的消息,相反,作为连接契约的一部分丢弃消息260。例如,如果连接契约要求“正好一次”或“至多一次”处理,那么响应计算机系统105可丢弃消息260。在该情形中,响应消息将被高速缓存直到被确认,然后可在对重发的响应中被重新发送给请求计算机系统100。或者,如果连接契约规定“至少一次”处理,则响应计算机系统105可处理消息220和260两者。例如,消息260可以是消息220的更新的版本,尽管消息220和260在大多数其它方面是完全相同的。
在任何情况中,图2示出了响应计算机系统105以响应消息270“序列[A,1],确认[B,1-2]关于[α]”回复。响应消息270标识了(即“A,1”)它本质上是第一响应消息240的副本。然而,消息270也包含确认“确认[B,1-2]”,指示它已经接收到由请求计算机系统100发送的消息220和230两者。另外,“关于”字段中的唯一第一标识符“α”向请求计算机系统指示,响应消息270是对第一请求消息(“ID[α]”)的响应。
假定请求计算机系统100这次接收到消息270,那么请求计算机系统100启动终止该端对端连接的步骤。然而可以理解,请求消息220和260的反复以及响应消息240和270的反复可以不断地被重新发送,直到两个计算机系统都充分地确认了彼此的消息。例如,在一个实现中,请求计算机系统100可被配置成在重新发送之前发送的请求消息之前为每一响应消息等待预定的时间(一秒、几秒、几分钟等)。或者,请求计算机系统100可被配置成每当从中介节点(例如,HTTP代理服务器)接收到传输错误就重新发送之前发送的请求消息。
无论请求计算机系统100是被配置成检查还是重新发送消息,响应计算机系统105都被限于根据连接契约处理任何或所有接收到的消息。在任何情况中,为了关闭已建立的端对端连接,请求计算机系统100发送连接终止消息280“终止[B]确认[A,1-2],ID[γ]”,且响应计算机系统以终止响应消息290“终止[A],关于[γ]”回复,该消息关于终止消息标识符“γ”。从而,消息280和290实质上提供了如对图1的消息170和180分别描述的相同功能。
图3示出了类似于之前附图的请求-响应情形,不同之处在于示出了其中由请求计算机系统100发送的至少一条消息失败的情形。例如,图3示出请求计算机系统100和响应计算机系统105使用各自的请求和响应消息300“创建序列[提供=A]”和310“创建序列响应[B]”建立了端对端连接。在建立端对端连接之后,请求计算机系统100发送含有第一标识符“α”的第一消息320“序列[B,1],ID[α]”,也发送含有第二标识符“β”的第二消息330a“序列[B,2],ID[β]”。当接收到第一消息320之后,在请求计算机系统100发送消息330a稍前或稍后,响应计算机系统105发送响应消息350“序列[A,1],确认[B,1-1]关于[α]”。
在接收消息350之前,请求计算机系统100也发送含有第三标识符“γ”的第三消息340“序列[B,3,最后],ID[γ]”。消息320、330a或340都不包含诸如图1和2中的对响应消息的任何确认指示符,因为请求计算机系统100还没有从响应计算机系统105接收到任何响应消息。最后,当请求计算机系统100接收到响应消息350时,请求计算机系统100紧接着接收消息320之后立即标识响应消息350是响应于由“ID[α]”标识的第一消息320而发送的。该标识是可能的,因为请求计算机系统100指定“关于[α]”,这指示消息350是对第一请求消息320的响应消息。
图3也示出响应计算机系统105发送响应消息“序列[A,2],确认[B,1,3]关于[γ]”,它仅是由响应计算机系统105发送的第二响应(即,“A,2”)。在该情形中,连接契约不施加任何排序要求,这允许在接收第二消息330a(没有到达)之前发送第三要求340以由响应系统105处理。消息360也使用标识符“确认[B,1,3]”指示响应计算机系统105已经接收到消息320和340。另外,因为消息360也包含第三标识符“γ”,消息360向请求计算机100指示,该回复是响应于带有该相同标识符“γ”的消息340。
因为请求计算机100含有仅对接收消息320和340的证实,请求计算机系统100重新发送第二消息330a。具体地,图1示出了请求计算机系统100将消息330a作为消息330b“序列[B,2],确认[A,1-2],ID[β]”重新发送。消息330b指示它是发送的第二消息“B,2”,也指示(“确认[A,1-2]”)已经接收第一和第二响应消息350和360。消息330b也包含标识符“β”,该标识符也包含在消息330a内。在接收消息330b之后,响应计算机系统105发送响应消息370“序列[A,3],确认[B,1-3]关于[β]”。消息370指示它是第三响应消息(即,“[A,3]”),也指示响应计算机系统105现在已经接收到请求计算机系统100已发送的三条消息中的每一条(即,“确认[B,1-3]”)。另外,消息370的“关于”字段中的第二标识符“β”向请求计算机系统100指示,该消息是响应于重试的请求消息330b。
因为已经在请求计算机系统100和响应计算机系统105之间适当地接收和确认了所有消息,所以请求计算机系统100终止该端对端连接。具体地,请求计算机系统100发送连接终止消息380“终止[B]确认[A,1-3],ID[δ]”,它使用标识符“确认[A,1-3]”来确认每一响应消息350、360和370,且包含终止消息标识符“δ”。响应计算机系统105然后以关于该终止消息标识符“δ”的响应消息390“终止[A],关于[δ]”来响应。
从而,此处描述的模式适应各种各样的消息传输失败,并确保消息是按照请求计算机系统期望的方式来处理的。具体地,此处描述的模式示出了消息如何能够按照请求计算机系统预期的方式在响应计算机系统处以指定的顺序处理,而不论消息在响应计算机系统处接收的顺序。本发明也可以按照完成本发明的方面的动作来描述。具体地,图4以流程图的形式,从请求计算机系统100的观点和响应计算机系统105的观点示出了的以请求-响应方式可靠地发送和接收消息的方法。
例如,图4示出,从请求计算机系统100的观点来看的一种方法包括建立端对端连接的动作400。动作400也包括建立与响应计算机系统的网络连接。例如,请求计算机系统400发送消息110“创建序列[提供=A]”,它可包括连接契约(未示出),该契约描述消息如何在连接中由响应计算机系统105处理。类似地,从响应计算机系统105的观点来看,该方法包括接受端对端连接的动作410。动作410包括接受与请求计算机系统的端对端连接。例如,响应计算机系统105通过发送消息120“创建序列响应[B]”来接受该端对端连接,它在连接契约的条款下接受该端对端连接。
另外,图4示出,从请求计算机系统100的观点来看的一种方法包含发送第一消息的动作420。动作420包括向响应计算机系统发送第一消息,该第一消息包含第一标识符。例如,请求计算机系统100通过发送第一消息130“序列[B,1]ID[α]”来启动请求-回复序列,该消息包含唯一地标识消息130的第一标识符“α”。从而,从响应计算机系统105的观点来看,相应方法包含接收第一消息的动作430。动作430包括从请求计算机系统接收第一消息,该第一消息包含第一标识符。例如,响应计算机系统105接收消息130“序列[B,1]ID[α]”,并标识第一标识符“α”。取决于定义该建立的端对端连接的契约,响应计算机系统105也可以处理消息130,或在进一步的通知之前高速缓存消息130的内容。
从响应计算机系统105的观点来看,该方法也包含发送响应消息的动作450。动作450包括向请求计算机发送响应消息。例如,当接收消息130之后,响应计算机系统105处理消息130,并准备和发送响应消息140“序列[A,1],确认[B1-1],关于[α]”,它包含指示消息140关于(即“关于”)第一标识符“α”的指示符。从而,图4示出,从请求计算系统100的观点来看,该方法也包含接收响应消息的动作440。动作440包括从响应计算机系统接收响应消息。例如,当请求计算机系统100接收响应消息140“序列[A,1],确认[B1-1],关于[α]”时,该请求一回复序列完成。消息140包含确认指示符“确认[B,1-1]”以及“关于”字段,它证实接收第一消息130,并指示消息140是对消息130的响应。然而,也可在确定例如当一定次数的重试之后或等待响应的一段时间的延迟之后第一消息失败时完成该请求-回复序列。
图4也示出,从请求计算机系统100观点来看,该方法包含发送连接终止消息的动作460。动作460包括向响应计算机系统发送连接终止消息,该连接终止消息包含终止消息标识符以及对已经接收响应消息的确认。例如,请求计算机系统最后从响应计算机系统105接收到带有关于由请求计算机系统100发送的所有消息已被接收的确认和证实的响应消息,并还标识由响应计算机系统105发送的所有响应消息已被接收。之后,请求计算机系统100发送连接终止消息170“终止[B],确认[A,1-2]ID[γ]”。连接终止消息170也确认接收到该响应消息“确认[A,1-2]”,且包含特定的终止消息标识符“γ”。
而且,图4示出,从响应计算机系统105的观点来看,该方法包含接收连接终止消息的动作470。动作470包括从请求计算机系统接收连接终止消息,该终止消息包含终止消息标识符和对接收到响应消息的确认。例如,响应计算机系统105接收消息170“终止[B],确认[A,1-2]ID[γ]”,它确认接收了响应消息140和160(即,通过“确认[A,1-2]”),且包含终止标识符“γ”,该标识符唯一地标识消息170。
作为响应,图4示出了从响应计算机系统105的观点来看,该方法包含发送响应消息以完成该端对端连接终止进程的动作490。动作490包括发送关于该终止消息标识符的响应终止消息。例如,响应计算机系统105发送终止响应消息180“终止[A],关于[γ]”,它“关于”端对端连接终止消息170中的终止标识符“γ”。从而,图4示出从请求计算机系统100的观点来看,该方法包含接收终止响应消息的动作480。动作480包括接收关于该终止消息标识符的终止响应消息。例如,请求计算机系统100接收消息180,消息180证实终止该端对端连接的请求,从而允许请求计算机系统100关闭该端对端连接。
此处描述或示出的实现也可以按照使得请求计算机系统100和响应计算机系统105适当地被配置成用于交换消息、响应和/或确认的系统来描述。以下系统示例也将按照前述的示意图来描述。即,在其中请求计算机系统向响应计算机系统发送请求消息,而响应计算机系统以响应消息响应每一请求消息的计算机化的环境系统中,一种使用请求-回复传输用于可靠地发送和接收请求消息以及用于可靠地发送和接收响应消息的方法包含依照以下描述的动作。
在一个实例中,请求计算机系统100通过在请求-回复传输连接的请求支路上向响应计算机系统105发送连接请求消息(例如,110)来建立与响应计算机系统105的端对端连接。作为回应,响应计算机系统105接受该连接请求,并在请求-回复传输连接的回复支路上向请求计算机系统提供这样的指示。即,响应计算机系统105在请求-回复传输连接的回复支路上发送连接接受消息(例如,120)。当该消息交换完成之后,请求计算机系统100和响应计算机系统105建立了端对端连接。请求计算机系统100然后启动请求-回复序列,并使用它所建立的请求-回复传输连接的请求支路来发送请求消息(例如,130)。请求计算机系统100也高速缓存该请求消息(例如,130),直到由响应计算机系统105确认该请求消息。
当来自请求计算机系统100的请求消息(例如,110)到达响应计算机系统105时,响应计算机系统105处理该请求消息(例如,110),并创建相应的响应消息(例如,140)。响应消息(例如,140)包括指示已接收请求计算机系统100的请求消息110的确认(例如,“确认[B,1-1]”)。类似于请求计算机系统100与请求消息(例如,130),响应计算机系统105也高速缓存该响应消息(例如,140),直到由请求计算机系统100适当地确认该响应消息(例如,140)。响应计算机系统105然后仅使用由请求计算机系统建立的请求-回复传输连接的回复支路将响应消息(例如,140)发送给请求计算机系统100。
当请求计算机系统100接收到包含对其发送的请求消息的确认(例如,“确认[B,1-1]”)的响应消息(例如140)时,该发送的消息的请求-回复序列完成。(或者,在其它情况中,请求-回复序列可以在判断请求消息由于任何数量的原因而失败之后完成。)请求计算机系统100然后删除该请求消息的高速缓存的副本,请求计算机系统100也对它发送给响应计算机系统105的下一消息(例如,150)附加对所接收到的响应消息(例如,140)的确认(例如,“确认[A,1-1]”)。
请求计算机系统100和响应计算机系统105可以按上述方式继续交换其它消息。例如,请求计算机系统100可继续发送请求消息并向响应计算机系统105提供用于发送相应的响应消息的请求-回复连接的回复支路。另外,请求和响应计算机系统均可继续高速缓存消息,直到另一计算机系统确认这些消息(无论是原始发送的消息还是重试)的接收。而且,请求和响应计算机系统均也对它们发送的消息附加相应的确认,使得发送的消息将对另一计算机系统指示该系统发送的消息的成功接收。而且,由于适当地确认了消息,这两个计算机系统均删除这些消息的高速缓存的版本。
当适当地发送和确认所有请求消息,接收所有回复消息,并使得完成了任何或所有请求-回复序列之后,请求计算机系统100在已建立的请求-回复传输连接的请求支路上发送连接终止消息(例如,170),其中该连接终止消息(例如,170)包含对包括最后接收的消息(例如,160)的所有响应计算机系统的响应消息的确认(例如,“确认[A,1-2]”)。响应计算机系统105然后接收该连接终止消息(例如,170)及附加的确认(例如,“确认[A,1-2]”),并删除已被确认的响应消息的高速缓存的副本。
从而,此处描述的模式和方法提供了关于使用请求-响应传输的可靠消息通信的多个好处。例如,本发明的实现可适应各种各样的消息通信失败,无论是在已建立的端对端连接中的请求或响应计算机系统处,还是该连接中的一个或多个中介节点处,诸如传输中介(例如,HTTP代理服务器)或消息通信中介(诸如SOAP路由器)。
另外,本发明的一个或多个实现包括确保未被适当确认的消息可以被重新发送,但仍然以符合连接契约的方式来处理。在一个方面,这可确保可在期望时避免重复的处理,或可确保可在期望时完成有序的处理。而且,本发明的实现允许回复消息在底层请求-回复传输的适当的响应支路上发送,取决于是在通信栈的传输还是消息层上相关这些消息。而且,本发明的一个或多个实现可允许以肯定的形式(即,指定接收到的消息)、否定的形式(即,指定丢失的消息)或其任何组合来表达确认。
图5及以下描述旨在提供可在其中实现本发明的合适的计算环境的简要概括描述。尽管不是必需的,但本发明将在诸如程序模块等由网络环境中的计算机执行的计算机可执行指令的通用语境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定任务或实现特定抽象数据类型。计算机可执行指令、相关联的数据结构和程序模块表示用于执行此处所揭示的方法的步骤的程序代码装置的示例。这样的可执行指令或相关联数据结构的特定序列表示用于实现在这些步骤中所述的功能的相应动作的示例。
本领域的技术人员可以理解,本发明可以使用多种类型的计算机系统配置,包括个人计算机、手持式设备、多处理器系统、基于微处理器或可编程消费者电子产品、网络PC、小型机、大型计算机等,在网络计算环境中实现。本发明也可以在分布式计算环境中实现,其中本地和远程处理设备执行任务并通过通信网络连接(或者通过硬连线、无线链路或通过硬连线或无线链路的组合)。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
参考图5,用于实现本发明的示例性系统包括常规计算机520形式的通用计算设备,后者包含处理单元521、系统存储器522和将包括系统存储器在内的各种系统组件耦合至处理单元521的系统总线523。系统总线523可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线体系结构中的任一种的局部总线。系统存储器包括只读存储器(ROM)524和随机存取存储器(RAM)525。基本输入/输出系统(BIOS)526包含有助于诸如启动时在计算机520中元件之间传递信息的基本例程,它可被存储在ROM 524中。
计算机520还可以包括用于从磁硬盘539中读取或向其写入的磁硬盘驱动器527,用于从可移动磁盘529中读取或向其写入的磁盘驱动器528,以及用于从诸如CD ROM或其它光学介质等可移动光盘531中读取或向其写入的光盘驱动器530。磁硬盘驱动器527、磁盘驱动器528和光盘驱动器530分别由硬盘驱动器接口532、磁盘驱动器接口533和光盘驱动器接口534连接至系统总线523。驱动器及其相关联的计算机可读介质为计算机520提供了对计算机可执行指令、数据结构、程序模块和其它数据的非易失性存储。尽管此处所示的示例性环境使用磁硬盘539、可移动磁盘529和可移动光盘531,也可以使用用于存储数据的其它类型的计算机可读介质,包括盒式磁带、闪存卡、数字多功能盘、贝努利盒式磁盘、RAM、ROM等。
可以在硬盘539、磁盘529、光盘531、ROM 524或RAM 525上存储包括操作系统535、一个或多个应用程序模块536、其它程序模块537和程序数据538等一个或多个程序模块的程序代码装置。用户可以通过诸如键盘540和定点设备542,或诸如麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等其它输入设备(未示出)向计算机520输入命令和信息。这些和其它输入设备通常由耦合至系统总线523的串行端口接口546连接至处理单元521。或者,输入设备可以由诸如并行端口、游戏端口或通用串行总线(USB)等其它接口连接。监视器547或另一显示设备也经由诸如视频适配器548等接口连接至系统总线523。除监视器之外,个人计算机一般包括其它外围输出设备(未示出),诸如扬声器和打印机。
计算机520可使用至一台或多台远程计算机,诸如远程计算机549a和549b的逻辑连接在网络化环境中操作。远程计算机549a和549b各自可以是另一台个人计算机、服务器、路由器、网络PC、对等设备或其它常见网络节点,且通常包括上文相对于计算机520描述的许多或所有元件,尽管在图5中只示出存储器存储设备550a和550b以及其相关联的应用程序536a和536b。图5中所示逻辑连接包括此处作为示例而非限制示出的局域网(LAN)551和广域网(WAN)552。这样的网络环境在办公室范围或企业范围计算机网络、内联网和因特网中是常见的。
当在LAN网络环境中使用时,计算机520通过网络接口或适配器553连接至局域网551。当在WAN网络环境中使用时,计算机520通常包括调制解调器554、无线链路或用于通过诸如因特网等广域网552建立通信的其它装置。调制解调器554可以是内置或外置的,它通过串行端口接口546连接至系统总线523。在网络化环境中,相对于计算机520所描述的程序模块或其部分可以存储在远程存储器存储设备中。可以理解,所示的网络连接是示例性的,且可以使用通过广域网552建立通信的其它手段。
本发明可以用其它具体形式来实施,而不背离其精神或基本特征。所述的实施例在所有方面都被认为仅是说明性的而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述来指示。落入本发明权利要求的等效技术方案的意义和范围内的所有变化都包含在权利要求书的范围内。
权利要求
1.在请求计算机系统发送请求消息给响应计算机系统、响应计算机系统以响应消息响应每一请求消息的计算机化的环境中的请求计算机系统处,一种使用请求-回复传输使得响应计算机系统仅按预期的方式处理所发送的消息来可靠地发送请求消息并可靠地接收响应消息的方法,包括以下动作通过使用由所述请求计算机系统建立的请求-回复传输连接的请求支路向响应计算机系统发送初始请求消息,来启动请求-回复序列;通过指示所述初始请求消息失败的所述请求-回复传输的失败指示机制接收失败指示;以及继续发送所述初始请求消息的高速缓存的副本给所述响应计算机系统,直到所述消息通信序列完成,其中,所述发送初始请求消息的高速缓存的副本的动作向所述响应计算机系统提供用于发送响应消息的所述请求-回复传输连接的回复支路。
2.如权利要求1所述的方法,其特征在于,所述消息通信序列的完成包括从所述响应计算机系统接收确认所述初始请求消息的接收的消息。
3.如权利要求1所述的方法,其特征在于,所述消息通信序列的完成包括确定在标识-个或多个阈值的失败重试之后不应再重试所述初始请求消息,或确定在指定的时间之后没有接收到任何响应。
4.如权利要求1所述的方法,其特征在于,所述失败指示是由对所述初始请求消息的响应消息由于所述请求-回复传输中的失败而未能到达所述请求计算机系统所触发的。
5.如权利要求4所述的方法,其特征在于,还包括从所述响应计算机系统接收确认所述初始请求消息的接收的不同的响应消息以及不同的请求消息,其中所述不同的响应消息是通过成功结束的不同的请求-回复消息交换接收的;以及向所述响应计算机系统发送确认所述不同的响应消息的接收的初始请求消息的高速缓存的副本;其中,所述发送初始请求消息的高速缓存的副本的动作向所述响应计算机系统提供可在其上发送所述初始响应消息的高速缓存的版本的请求-回复传输连接的回复支路。
6.如权利要求1所述的方法,其特征在于,还包括以下动作标识所述初始请求消息被成功发送且没有接收到响应消息;在指定的延迟间隔之后反复发送所述初始请求消息的高速缓存的副本,其中所述发送初始请求消息的每一高速缓存的副本的动作向所述响应计算机系统提供可在其上发送初始响应消息的所述已建立请求-回复传输连接的回复支路。
7.如权利要求1所述的方法,其特征在于,还包括以下动作接收对所述初始请求消息的初始响应消息;标识没有需要被发送的其它请求消息,使得经过了指定的时间间隔而没有在其上发送对所述初始响应消息的确认的另外的请求消息;以及向所述响应计算机系统发送确认消息,其中所述确认消息不包含任何请求。
8.如权利要求1所述的方法,其特征在于,还包括以下动作在所述消息通信序列完成之后,通过向所述响应计算机系统发送连接终止消息来启动终止消息通信序列;通过所述请求-回复传输的失败指示机制标识所述连接终止消息失败;以及重新发送所述连接终止消息,直到完成所述终止消息通信序列。
9.如权利要求8所述的方法,其特征在于,所述标识终止消息通信序列的完成包括在由所述请求计算机系统建立的传输连接的回复支路上从所述响应计算机系统接收连接终止响应。
10.如权利要求8所述的方法,其特征在于,所述标识终止消息通信序列的完成包括确定所述连接终止序列的失败。
11.如权利要求10所述的方法,其特征在于,所述终止消息通信序列的完成包括确定在标识了一个或多个阈值的失败重试之后不应再重试所述初始请求消息,或者确定在指定的时间之后不再接收到任何响应。
12.在请求计算机系统发送请求消息给响应计算机系统、响应计算机系统以响应消息响应每一请求消息的计算机化的环境中的响应计算机系统处,一种使用请求-回复传输使得响应计算机系统仅按预期的方式处理所发送的消息,来可靠地接收请求消息并可靠地发送响应消息的方法,包括以下动作通过请求-回复传输在一个或多个请求-回复连接中的任何之一上接收来自请求计算机系统的消息;以及仅在所述一个或多个请求-回复连接中的任何之一的回复支路上向所述请求计算机系统发送消息。
13.如权利要求12所述的方法,其特征在于,还包括通过由所述请求计算机系统建立的一个或多个请求-回复传输连接之一从所述请求计算机系统接收确认消息,所述确认消息不包含任何其它请求消息,且所述确认消息关于在所述响应计算机系统处高速缓存的一条或多条之前发送的响应消息;从所接收到的确认消息中标识所述请求计算机系统没有提供请求;删除所述被确认的一个或多个响应消息的高速缓存的副本;以及使用所提供的一个或多个请求-回复传输连接之一的回复支路向所述请求计算机系统发送返回确认消息,其中所述返回确认消息不包含任何回复消息,且所述返回确认消息确认对所有之前接收到的请求消息的接收。
14.如权利要求12所述的方法,其特征在于,由所述请求计算机系统发送新的请求消息,且所述响应计算机系统至少暂时无法接受或处理所述新的请求消息,使得由所述响应计算机系统发送的一条或多条消息之一仅确认任何其它之前接收到的、由所述请求计算机系统发送的请求消息,而不是所述新的请求消息。
15.如权利要求12所述的方法,其特征在于,接收和处理初始请求消息和后继请求消息,且向所述请求计算机系统发送相应的初始响应和后继响应消息,所述方法还包括从所述请求计算机系统接收确认仅对所述后继响应消息的接收的新消息;以及在由所述最近接收到的新消息提供的回复支路上向所述请求计算机系统发送所述初始响应消息的高速缓存的副本。
16.如权利要求15所述的方法,其特征在于,所述初始请求消息不同于由所述请求计算机系统发送的或在所述响应计算机系统接收的第一请求消息。
17.在请求计算机系统发送请求消息给响应计算机系统、响应计算机系统以响应消息响应每一请求消息的计算机化的环境中的请求计算机系统处,一种存储着计算机可执行指令的计算机程序产品,当所述计算机可执行指令被执行时,使得所述请求计算机系统处的一个或多个处理器执行一种使用请求-回复传输使得响应计算机系统仅按预期的方式处理所发送的消息,来可靠地发送请求消息并可靠地接收响应消息的方法,所述方法包括以下动作通过使用由所述请求计算机系统建立的请求-回复传输连接的请求支路向响应计算机系统发送初始请求消息,来启动请求-回复序列;通过指示所述初始请求消息失败的所述请求-回复传输的失败指示机制接收失败指示;以及继续发送所述初始请求消息的高速缓存的副本给所述响应计算机系统,直到所述消息通信序列完成,其中所述发送初始请求消息的高速缓存的副本的动作向所述响应计算机系统提供用于发送响应消息的所述请求-回复传输连接的回复支路。
全文摘要
一种可靠的请求-响应机制允许请求计算机系统和响应计算机系统在建立的端对端连接中以响应计算机系统以由请求计算机系统预期的方式处理请求的方式来发送和接收消息,使得所有的消息通信由请求计算机系统启动。请求计算机系统和响应计算机系统可通过重新发送之前发送的消息的高速缓存的版本,并通过确认所接收到的每一消息的接收来适应各种各样的消息通信失败,诸如间歇的网络连接或SOAP中介的传输失败。任一计算机系统上的高速缓存的消息在被适当地确认之后被删除。当由响应计算机系统确认所有发送的消息,且请求计算机系统从响应计算机接收到所有响应消息之后,使用连接终止消息的交换来终止该端对端连接。
文档编号H04L1/16GK1832475SQ20061000376
公开日2006年9月13日 申请日期2006年2月8日 优先权日2005年3月8日
发明者K·贾弗瑞莱伍克, O·赫瑞彼赛克, R·希尔, S·科恩, S·R·巴特雷斯 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1