具体实施方式
本发明提供了被配置成在请求-响应环境中确保可靠消息通信的***、方法和计算机程序产品。具体地,本发明的实现部分地涉及这样一种特定请求-响应机制,该机制在响应计算机***上施加约束以仅以所预期的方式处理由请求计算机***发送的消息。
从本发明的说明书和权利要求书中可以理解,本发明的一方面涉及在请求计算机***和响应计算机***之间建立唯一标识来自两个计算机***的消息的端对端的连接。本发明的另一方面涉及向响应计算机***发送请求消息,随后是来自响应计算机***的响应消息。响应计算机***确认来自请求计算机***的请求消息,而请求计算机***确认来自响应计算机***的响应消息。本发明的又一方面涉及以同样实现来自响应计算机***的终止确认消息的方式来终止通信。
例如,图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建立通信的其它手段。
本发明可以用其它具体形式来实施,而不背离其精神或基本特征。所述的实施例在所有方面都被认为仅是说明性的而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述来指示。落入本发明权利要求的等效技术方案的意义和范围内的所有变化都包含在权利要求书的范围内。