专利名称:万维网使能双向远程消息传递工具的制作方法
技术领域:
本发明的多个方面涉及全球范围的万维网。本发明的其他方面涉及经由全球范围的万维网的消息传递。
背景技术:
基于万维网(web)的分布计算的平台已经在诸如基于万维网的通信的应用中被广泛采用。许多基于万维网的通信应用已经以这样一种方式,即这些应用可以利用现有万维网技术,而被发展。例如,已经在万维网上使用超文本传输协议(HTTP)发送消息。虽然现有万维网技术已经引起万维网应用的快速发展,但是它们同时对发展支持更复杂的和要求更高的特征的灵活的基于万维网的通信应用产生了障碍,这些特征例如是从服务器组件接收实时通知。
HTTP是基于简单的客户/服务器交互模型或请求-响应模型而开发的数据传输协议。在HTTP中,客户总是发起请求,并且服务器针对该请求生成响应,接着该响应被发回客户。一些万维网应用使用HTTP作为底层传输协议。与这种模型相关联的一个已知的问题是服务器实体很难通知其客户发生在服务器上的任何事件(例如,状态改变)。例如,服务器组件很难使用HTTP向它的万维网客户发起消息。这个缺点内在地限制了使用该模型的万维网应用的能力。在从服务器接收实时通知的能力可能是至关重要的应用中,这尤其成问题。
有其他公知的提供基于万维网的即时通知的机制。一类这样的机制包括在线即时消息传递或在线交谈。这类机制依赖专用协议和传递机制,二者都不能容易地结合到基于万维网的企业应用中。另一类机制包括诸如远程过程调用(PRC)、公共对象请求代理(CORBA)体系结构、JAVA远程方法调用(RMI)和Java消息传递服务(JMS)的各种远程消息传递机制。因为这类的机制最初是为客户/服务器应用设计的,所以尽管人们努力将它们用于万维网环境,但是由于诸如由防火墙施加的限制和互联网的高度分布和多平台特性,迄今为止这种努力被证明是困难的。
本发明根据示例实施例被进一步描述,示例实施例将参照附图详细描述。这些实施例是非限制性的示例实施例,其中,在附图的若干视图中,类似的标号表示类似的部分,其中图1是本发明的实施例的体系结构;图2描述了万维网客户和事件产生器之间的双向消息传递机制;图3描述了与万维网客户与万维网服务器有关的RMF(RemoteMessaging Facility,远程消息传递工具)万维网客户的上层功能方框图;图4描述了与万维网服务器和事件产生器有关的RMF服务器的上层功能方框图;图5图示了万维网客户、信道、监听器代理和消息板中的存储槽之间的关系;图6描述了一项处理的示例示意图,其中基于万维网客户的请求建立了远程消息传递会话;图7描述了一项处理的示例示意图,其中万维网客户经由RMF万维网客户向RMF服务器预订事件;图8描述了一项处理的示例示意图,其中万维网客户请求RMF服务器监听预订事件;图9描述了一项处理的示例示意图,其中事件产生器在消息板上发布数据;
图10是一项处理的示例流程图,其中万维网使能双向消息传递通信通过本发明而被促进;图11是一项处理的示例流程图,其中在万维网使能双向消息传递通信中RMF万维网客户协助了万维网客户;图12是一项处理的示例流程图,其中RMF服务器同RMF万维网客户和事件产生器交互以促进万维网使能双向消息传递通信;和图13是一项处理的示例流程图,其中事件产生器与RMF服务器交互。
具体实施例方式
下面参照详细举例说明的实施例描述本发明。应该清楚,本发明会被具体化为很多种形式,其中某些可能与所公开的那些实施例很不相同。因此,这里所公开的具体的结构和功能细节只是代表性的,并不限制本发明的范围。
下面描述的处理可以由通用计算机单独执行,或者与专用计算机联合来执行。这种处理可以由单个平台或分布处理平台执行。此外,这种处理和功能可以以专用硬件的形式或以由通用计算机运行的软件的形式来实现。任何在这种处理中所操作的数据或作为这种处理的结果被生成的数据可以存储在任何本技术领域中传统的存储器中。例如,这样的数据可以存储在临时存储器中,例如在给定计算机系统或子系统的RAM中。另外,或者可替换地,这样的数据可以存储在长期存储设备中,例如磁盘、可重写光盘等等。这里为了公开的目的,计算机可读介质可以包括任何形式的数据存储机制,包括这样的现有存储器技术,以及这种结构和这种数据的硬件或电路表示。
图1是本发明的实施例的体系结构和其操作所在环境。示于图1中的万维网使能双向远程消息传递机制100包括客户110、服务器150和事件产生器170,其中,客户110和服务器150之间经由网络140a通信,服务器150和事件产生器170之间经由网络140b通信。网络140a一般可以表示包括局域网(LAN)、广域网(WAN)、互联网、内联网或任何其他类型专用网络的通信网络。网络140b除了可以对应上面提到的可能的网络,还可以对应内部网。在实现中,网络140a和网络140b还可以对应相同的网络。
在万维网使能双向远程消息传递机制100中,客户110和事件产生器170通过由服务器150促进的万维网使能双向远程消息传递机制来通信。客户110包括一个或多个万维网客户117,…,132,它们中的每个都被连接到远程消息传递工具(RMF)客户(120,…,135)。服务器150包括万维网服务器155和远程消息传递工具(RMF)服务器160。事件产生器170包括一个或多个事件产生器180,…,190。
在示于图1中的双向远程消息传递机制中,万维网客户(例如,万维网客户1,117)和事件产生器(例如,事件产生器1,180)通过对应的RMF万维网客户115、万维网服务器155和RMF服务器160通信。图1中的远程消息传递机制100是基于预订的。例如,事件产生器180可以在RMF服务器160中发布数据。万维网客户120可以向RMF服务器160预订与来自事件产生器180的数据发布有关的事件。来自万维网客户的预订可以通过它对应的RMF万维网客户而被提出。RMF服务器160一旦接受预订,就可以监视事件,并且通知适合的RMF万维网客户,通过该RMF万维网客户,事件被派送到预订该事件的万维网客户。
在示于图1中的机制100中,在客户端,各万维网客户经由它对应的RMF万维网客户与服务器150通信。这种通信包括发送请求和接收响应。例如,万维网客户117可以通过它的RMF万维网客户120发送请求以向RMF服务器160预订事件。RMF万维网客户120可以在请求被发送到万维网服务器155之前基于万维网协议将请求编码。例如,RMF万维网客户120可以使用超文本传输协议(HTTP)将请求编码。万维网客户可以经由RMF万维网客户所提供的明确定义的应用编程接(API)来与RMF万维网客户接口。
在服务器端,RMF服务器160促进经由万维网服务器155的与RMF万维网客户的通信。例如,RMF服务器160可以向万维网客户117发送事件作为对万维网客户请求监听所预订事件的响应。事件在使用HTTP通过万维网服务器155被发送到客户之前,可以被编码。使用现有的万维网协议允许在现有的万维网环境中使用远程消息传递机制100。例如,通过分别使用HTTP POST(递送)和HTTP Response(响应)对请求和响应编码,远程消息传递机制100可以被结合到现有万维网应用中。
事件产生器可以通过RMF服务器160与万维网客户交互。例如,它可以在RMF服务器160中张贴数据。它还可以更新RMF服务器160中现有的数据。事件产生器和RMF服务器160之间的交互可以通过RMF服务器API。
图2描述了根据本发明的远程消息传递机制100的内部结构。使用单个万维网客户和单个事件产生器图示了示于图2中的机制100的内部结构。在图2中,万维网客户117和事件产生器180为双向远程消息传递而连接。万维网客户117连接到经由网络140a与万维网服务器155通信的对应的RMF万维网客户120。RMF服务器160连接到万维网服务器155和事件产生器180两者。与万维网服务器155接口,RMF服务器160跨过网络140a通过RMF万维网客户120与万维网客户177通信。
在图2中,RMF万维网客户120包括RMF客户API 210、会话代理211、消息传递代理215、消息分析器217和事件管理器220。万维网客户117通过RMF客户API 210与RMF万维网客户120接口。该接口可以允许万维网客户117请求建立远程消息传递会话、预订事件、接收通知以及查询信息。RMF客户API 210还可以促进使用事件掩码(event mask)在所收到的事件上执行的过滤操作。此外,它可以提供查询存储在RMF服务器160上的内容的方法。在附录A中,示例RMF客户API被结合作为本发明的一部分。
会话代理212是RMF万维网客户120中的主控制器,负责建立和维持与RMF服务器160的会话。会话代理212还可以发起与RMF服务器160的监听连接以监听所预订的事件。消息传递代理215促进RMF万维网客户120和RMF服务器160之间的通信。例如,消息传递代理215可以发送请求到RMF服务器160,并且处理从RMF服务器160收到的响应。消息分析器217分析从RMF服务器160收到的响应。
事件管理器220管理客户端事件预订,并且当收到事件时,向万维网客户117派送事件。当收到的事件累积时,事件管理器217还可以维护队列。累积可能是由于一些事件不能被立即传送而造成的。
在示于图2中的所图示的实施例中,万维网客户117通过RMF万维网客户120与RMF服务器160交互。例如,万维网客户可以通过RMF万维网客户120发送请求以建立与RMF服务器160的远程消息传递会话。这样的会话可以由万维网客户通过经由RMF万维网客户发送结束会话请求而被结束。在远程消息传递会话的过程中,万维网客户117可以通过RMF万维网客户120向RMF服务器160预订事件。万维网客户117还可以通过发送取消预订请求来对所预订的事件取消预订。从万维网客户到RMF服务器160的请求可以作为HTTP POST消息被发送。
当所预订的事件发生时,事件可以以诸如HTTP响应的方式经由RMF万维网客户从RMF服务器160发送到万维网客户117。在事件管理器220向万维网客户派送通知以通知事件的到达之前,收到的响应可以被处理(由消息传递代理)和被分析(由消息分析器)。
万维网客户还可以经由RMF万维网客户120执行远程消息查询。例如,万维网客户117可以经由RMF万维网客户向RMF服务器160发送查询请求以检查某些数据的状态。返回的消息还可以以利用HTTP协议而被编码的响应的形式被发送。万维网客户117还可以经由RMF万维网客户120在RMF服务器160张贴对于特定事件产生器的消息。
图3示出了万维网客户117与RMF万维网客户120的不同部分是如何交互的。会话代理212从万维网客户117接收请求并通过消息传递代理215将请求发送到万维网服务器155。当消息传递代理215接收来自万维网服务器155的响应时,它与消息分析器217连接以分析响应。如果响应是事件,则消息传递代理215向事件管理器220发送所分析的事件。事件管理器220接着向万维网客户中的事件监听器205派送所分析的事件。如果响应不是事件,则所分析的消息被发送到会话代理212,接着被派送到万维网客户117。
事件管理器220可以与存储将被派送的所收到的事件的事件队列310相关联。事件队列310可以被实现为按照先进先出(FIFO)的顺序而派送被排队的事件的队列。它还可以被实现为派送最后所接收的事件的栈。实现方案可以取决于作为万维网客户运行的万维网应用。
在图示于图2中的实施例中,万维网服务器155截获所有从RMF万维网客户120发出的请求,并且将请求转发到RMF服务器160。所转发的请求可以根据诸如HTTP的万维网协议被编码。例如,启动远程消息传递会话的请求可以以HTTP POST协议的形式被编码,并被发送到RMF服务器160。任何由RMF服务器160基于请求生成的响应都被返回到做出请求的万维网客户。例如,当根据来自万维网客户的开始会话的请求建立远程消息传递会话时,RMF服务器160可以在所请求的会话被建立之后生成包括会话ID的响应。这样的响应可以被万维网服务器作为HTTP响应来编码并被转发到万维网客户。
在图2中,RMF服务器160处理来自万维网客户的请求,监听由万维网客户预订的关于消息板对象的事件,并且根据客户的预订向适合的客户组播事件。如果万维网服务器155支持小服务器程序(servlet),则RMF服务器160可以以作为万维网服务器155的扩展的小服务器程序来操作。RMF服务器160还可以作为通过明确定义的接口连接到万维网服务器155的独立服务器来操作。例如,独立RMF服务器可以通过公共网关接口(CGI)与万维网服务器交互。
在图2中,RMF服务器160包括会话管理器230、信道管理器235、消息分析器240、一个或多个监听器代理245、基本过滤器代理250、产生器注册表255、消息板260、RMF服务器API 265和访问控制简表270。事件产生器180通过RMF服务器API 265与RMF服务器160接口。该接口可以允许事件产生器180在产生器注册表255中注册自身,并且在消息板260中发布数据。通过RMF服务器API 265,RMF服务器160还可以请求事件产生器180认证万维网客户并过滤某些事件。在附录B中,示例RMF服务器API被结合作为本发明的一部分。
会话管理器230协调RMF服务器160与RMF万维网客户120及事件产生器180二者之间的交互。会话管理器230控制RMF会话并管理请求处理的整个过程。RMF会话可以被认为是RMF客户和其服务器之间的受信关系。各会话包括唯一的会话ID,所以它的客户可以容易地被识别。
在图2中,万维网客户117可以请求RMF服务器160建立远程消息传递会话,在该会话过程中,万维网客户可以向RMF服务器160预订(或取消预订)事件、监听所预订的事件、查询存储在消息板260中的数据项并且向消息板260张贴消息。会话可以由万维网客户发起,并且可以由万维网客户117或RMF服务器160终结。会话管理器230通过维持这样的会话来促进双向远程消息传递。
会话可以在初始建立过程中被认证。在这种情况下,会话管理器230可以通过位于事件产生器180中的会话代理285进行认证。还可以利用匿名客户身份建立会话。在这样情况下,可以不进行认证。认证是否是必须的可以取决于在RMF服务器160中的访问控制简表270中存储的访问策略。
除了管理远程消息传递会话,会话管理器230还可以基于来自万维网客户117的请求为对应的万维网客户维持持久(persistent)的监听连接。这样的连接可以专用于从服务器向客户推送事件。事件连接可以具有多路复合事件预订的能力。在正常情况下,一旦有成功的事件预订,会话管理器230就可以为客户建立监听连接。在其他情况下,会话管理器230还可以基于客户的请求建立监听连接。当不再有任何未完结的预订时,会话管理器230可以关闭监听连接。
会话管理器230还可以基于由万维网客户117所发出的请求或由它自己决定来终结远程消息传递会话。万维网客户或者RMF服务器都可以发出这样的请求。
信道管理器235管理诸如事件预订或事件取消预订的与事件有关的事情。它可以将各(具有成功的事件预订的)远程消息传递会话与专用信道相关联以容纳所预订的事件。信道管理器235还可以在为客户建立信道之前,基于当前访问策略设置(可以存储于访问控制简表270中),进行访问控制。信道可以实现为FIFO队列的封装,用线程推送事件。为了监视所预订的事件,信道还通过一个或多个监听器代理245被连接到消息板260。
监听器代理245可以专用于消息板260中的单个存储槽(slot)(后面将描述)。它从其专用存储槽接收事件并将事件转发到适当的信道。这样做时,监听器代理245可以从不同的万维网客户汇集事件预订。
当客户预订与存储槽相关联的事件时,监听器代理245被连接到专用于该客户的信道。监听器代理245负责监听发生在存储槽中的所预订的事件。例如,假设万维网客户(例如,117)预订与在消息板260中的特定存储槽上进行的插入操作有关的事件。接着,一个信道可以专用于万维网客户117。万维网客户可以负责发起对该事件的监听连接。一旦建立了监听连接,与特定存储槽相关联的监听器代理就被链接到专用于万维网客户117的信道。只要事件产生器在该存储槽上进行插入操作,监听器代理就会接收所预订事件的实例。
在向所连接的信道发送事件之前,为了访问控制的目的,监听器代理245可以用基本过滤器代理250来检查以执行某个过滤操作。它还可以进一步用事件产生器(例如180)中的过滤器代理290来检查以进行动态事件过滤。过滤后的事件接着从监听器代理245被发送到专用于预订了该事件的客户的信道。此时,信道管理器235向适当的万维网客户派送该事件。
除了专用于分析客户的请求以外,服务器端的消息分析器240扮演与在客户端的相对应的消息分析器类似的角色。。
在图2中,消息板260提供信息共享的机制。事件产生器170可以利用消息板260来与万维网客户通信或相互通信。例如,事件产生器180可以在消息板260上张贴共享的数据。为了在各方之间共享数据,在消息板260中可以采用引用共享(sharing-by-reference)的方案。在这种方案中,各共享方可以保存对可以被存储在某个中央位置的数据片的引用。
消息板260可以促进不同结构的数据共享。例如,数据可以是简单数据项或者可以是数据项的集合。消息板260支持被组织为例如表格、队列、列表、数组或栈的数据项的集合。消息板260还可以被设计以便其支持定制的结构。
为了容纳共享数据,消息板260可以提供多个称为存储槽(slot)的容纳单元。存储槽是一些共享数据的保存者或组织者,并且可以利用唯一的标识符来索引。为了有利于不同结构的共享数据,消息板260可以支持对应于各种结构的不同类型的存储槽。例如,简单存储槽可以用于容纳单个数据项,表格数据槽可以用于容纳被组织为表格的多个数据项。
不同类型的存储槽之间的差异可以与数据是如何被组织、操作和检索的有关。例如,表格存储槽允许应用程序使用唯一的名称访问数据项。数组存储槽或列表存储槽中的数据项两者都可以使用整数索引来访问。数组存储槽具有固定长度,而列表存储槽不具有固定长度。列表存储槽还允许应用程序在列表的任意位置插入数据项。另外,队列存储槽和栈存储槽两者都在它们的数据项上施加了访问顺序。例如,队列存储槽的访问顺序是FIFO,而栈存储槽的访问顺序支持后进先出(LIFO)顺序。
在引用共享方案中,存储在存储槽中的数据项可以包含对共享数据的唯一的引用。这样的共享数据项还可以包含一些有关共享数据的诸如时间戳和数据项描述的附加信息。
消息板260还可以向有关各方发送事件通知。为了支持这种功能,消息板260可以包含适当的机制以生成事件并发出通知。消息板260可以在不同的情况下发出通知。一种情况与存储槽行为相关联。这样的行为包括存储槽被创建或存储槽被删除。与存储槽行为有关的事件称为存储槽事件。另一种情况是与数据操作行为相关联。例如,一项数据初次被张贴(发布)在存储槽中、从存储槽中删除或在存储槽中被更新。与数据操作行为相关联的事件称为数据事件。
为了接收事件,事件监听器可以连同事件名称向消息板260注册。监听器可以与多于一个事件类型相关联。例如,监听器代理可以被注册以监听存储槽上的插入数据事件。事件可以被同步发送或异步发送,这取决于特定的存储槽设置。缺省模式可以被设置为同步。存储槽事件可以是SLOT_CREATED(存储槽创建)、SLOT_CLEARED(存储槽清除)或SLOT_DELETED(存储槽删除)。存储槽事件只指定与事件相关联的存储槽名称。数据事件可以是DATA_POSTED(数据张贴),DATA_CHANGED(数据改变)或DATA_DELETED(数据删除)。这类的事件(数据事件)可以注册存储槽名称和数据项引用二者。
除了允许事件产生器发布数据并发送事件通知之外,消息板260还可以允许事件产生器发布消息处理器,该消息处理器提供句柄给向其发送消息的其他事件产生器或万维网客户。被递送到消息处理器的各消息可以引起作为应答的响应。存储槽可以包含由一些事件产生器所注册的一组消息处理器。各消息处理器在存储槽内以消息名称来唯一地命名。不允许重复注册。
消息处理器还可以相对于参数列表而被定义。当事件产生器调用消息处理器时,这样的参数可能需要被初始化。可以以数据项的形式给出响应,所述数据项可以包含一些返回值、数据源和描述。事件产生器可以同步或异步递送请求。在异步模式中,请求可以与响应监听器一起递送,以便它可以监听应答。这样的内建的询问和应答机制与数据容纳和通知机制一起允许消息板260进行动态信息交换。为了促进与事件产生器的交互,消息板260可以提供API。在附录C中,示例消息板API被结合作为本发明的一部分。
图4描述了RMF服务器的上层功能方框图,示出了RMF服务器160的不同部分是如何交互的。在图4中,会话管理器230接收并处理来自万维网客户117的请求。请求处理可以包括调用消息分析器240以分析请求。如果请求对应于在万维网客户117和事件产生器180之间建立远程消息传递会话,则会话管理器230可以首先通过位于事件产生器180中的会话代理285来认证万维网客户117。如果认证成功,则会话管理器230建立会话410并通知事件产生器180的会话代理285,告知其与万维网客户117的会话正在运行。
当请求是向RMF服务器160预订事件时,会话管理器230使用访问控制简表270检查万维网客户117访问(与所预订的事件相关联的)存储槽的访问许可。信道被分配给(建立在万维网客户117和事件产生器180之间的)会话并且与所请求的存储槽相关联的监听器代理245被链接到该信道。预订还可以指定要在任何被检测到的事件上进行的过滤操作。相应的过滤器可以位于基本过滤器代理250中或在位于事件产生器180中的过滤器代理290中。
与此同时,会话管理器230可以建立并维持监听连接,通过该监听连接,所预订的事件可以连续被监视并被发送回万维网客户117。所观察的事件可以通过基本过滤器代理250或过滤器代理290被过滤,并被添加到被分配给万维网客户117的信道。信道管理器235然后向万维网客户117发送该事件。
在图4中,为了用户认证和会话控制的目的,会话代理285可以(由事件产生器180)向RMF服务器160注册。以这种方式,RMF服务器160不在它的客户上施加任何特定的认证要求。可以有其他可替换的方式来进行认证。例如,认证可以由万维网服务器155或由操作系统来进行。
万维网应用可以利用建立到万维网使能双向远程消息传递机制100中的工具来保护它们的信息。这些工具可以包括用户认证——基于用户名和密码对的认证方案。万维网应用可以通过安全代理对象而将鲁棒的安全框架与万维网使能双向远程消息传递机制100结合来保证足够的安全,服务器端访问控制——RMF服务器160在其中通过过滤器代理加强服务器端的访问控制的认证方案。可以为特定用户或用户组建立安全策略,指定客户可以访问哪些存储槽、客户可以监听什么事件或者客户被允许调用什么消息处理器,或者只读操作——限制客户对存储在服务器端的数据项做出任何直接改变的安全措施。
图5图示了万维网客户、信道、监听器代理和消息板中的存储槽之间的关系。如图5所示,各监听器代理与特定存储槽相关联。例如,监听器代理i,245a与消息板260中的存储槽3,520相关联,监听器代理k,245b与消息板260中的存储槽j,530相关联。在图5中,监听器代理可以被连接到多个信道,所述各信道专注于监听与该监听器代理所关联的存储槽有关的事件。例如,监听器代理k,245b被连接到信道1,540和信道m,555两者。
连接到同一监听器代理的不同的信道可以专注于不同的事件。例如,在图5中,信道1(540)可以专注于与存储槽j(530)的删除有关的任何存储槽事件,而信道m(555)可以专注于与向存储槽j(530)插入数据有关的任何数据事件。在这种情况下,监听器代理245b可以监视两种类型的事件。当任何事件发生时,监听器代理245b可以进行适当的过滤(不同事件可能需要不同的过滤操作)并且发送事件到适当的信道。
信道可以连接到不同的监听器代理。例如,在图5中,信道1,540被连接到监听器代理245a和245b两者。每个信道专用于一个客户。例如,图5中的信道450专用于万维网客户1,117。万维网客户可以预订与消息板260中的不同存储槽相关联的事件。在这种情况下,对应的不同监听器代理链接到相同的信道以同时监听所预订的事件。
为了使得能在RMF客户110和RMF服务器160之间通信,万维网使能双向远程消息传递机制100可以利用消息传递模型。这种消息传递模型可以包括多个对应于不同请求和响应的命令。机制100利用消息传递模型作为RMF消息传递协议,其包括以下命令BeginSession(开始会话)——该命令对应于由万维网客户发出的发起新的远程消息传递会话的请求。对该请求的肯定响应可以包括唯一的会话ID。该会话ID可以在内部使用,并且严格地只由RMF客户和RMF服务器共享,EndSession(结束会话)——该命令对应于由万维网客户或服务器实体发出的终结正在进行的会话的请求。当会话终结时,所有未完成的事件预订可以被客户和服务器两者清除。与此同时,它们之间存在的任何事件监听连接也可以被断开。另外,与该会话相关联的任何资源可以被释放。如果请求是由万维网客户发出的,则来自服务器的对该请求的响应可以是简单的确认(acknowledgement)。如果请求是由服务器发出的,则万维网客户可以不必发送响应,CheckSession(检查会话)——该命令对应于检查正在进行的会话的当前状态的请求。在这种情况下,RMF服务器可以返回代码以指示服务器端的当前状态。不同的代码值可以表示不同的状态。例如,代码100可以指示正常状态,代码200可以指示存在底层会话但事件连接是断开的。代码300可以指示不存在这种会话,SubscribeEvent(预订事件)——该命令对应于预订事件的请求。该请求可以同时通知RMF服务器,告知其客户希望以事件掩码(可以与请求一起提供)来监听来自指定存储槽的事件。如果预订成功,则服务器可以返回肯定确认作为响应。否则,服务器可以返回指示不成功的预订的错误代码。成功的预订可以不要求存在指定的存储槽。成功的预订还可以引起客户开始事件监听请求,UnsubscribeEvent(取消预订事件)——该命令对应于取消现存的预订的请求。如果预订被成功取消,则RMF服务器可以简单地发送确认。否则,服务器可以发送指示错误情况的返回代码。当被取消的预订是关于万维网客户的最后所剩的预订时,对应的事件监听连接(如果有的话)可以同时被断开,QueryData(查询数据)——该命令对应于取得存储于消息存储槽的命名数据项的当前值的请求。如果数据项的名称被省略,则存储槽缺省为简单存储槽。为了成功地处理该请求,可能需要目标存储槽预先存在并且需要适当的许可。否则可以返回错误代码以指示情况,ListenEvent(监听事件)——该命令对应于建立事件监听连接的请求。通常,直到至少有一个对于客户的预订事件,用户才可以发送监听事件请求。万维网客户还可以发送主动超时或请求以结束当前会话。当连接由于主动超时或任何其他原因而中断时,万维网客户可能在底层会话仍有效时负责重建新的连接,和PostMessage(张贴消息)——该命令对应于被发送到存储槽以调用由事件产生器所定义的消息处理器的请求。该请求可以与存储槽名称、存在于存储槽上的消息名称和参数列表一起发出。为了成功地处理该请求,可能需要目标存储槽预先存在并且需要适当的许可。肯定的响应可以包括数据项。消息可以被异步张贴。在这种情况下,响应通过会话的事件信道被发送。
上面描述的命令可以使用现存的互联网协议在网络上传送。例如,所有的请求可以从发起方(万维网客户110)通过HTTP POST传送到万维网服务器155。如果RMF服务器160被实现为万维网服务器155中的小服务器程序,则HTTP POST可以直接到达RMF服务器160。在RMF服务器160被实现为独立服务器时(例如,如果万维网服务器155不支持小服务器程序),HTTP POST可以通过专用CGI扩展从万维网服务器155被传递到RMF服务器160。
在图6到图9中,描述了不同处理的示例示意图,其中,万维网使能双向远程消息传递机制100中的不同方彼此交互以获得双向远程消息传递能力。图6描述了一项处理的示例示意图,其中,基于万维网客户的请求建立了远程消息传递会话。在图6中,万维网客户117发送请求到位于RMF万维网客户的120中的会话代理212以开始与事件产生器180的会话。消息传递代理215对BeginSession请求进行编码(例如,编码为HTTP POST)并且将它发送到RMF服务器160。
位于RMF服务器160中的会话管理器230接收BeginSession请求并通过消息分析器240分析该请求。该请求可以指定和其建立所请求的会话的事件产生器。基于该请求,会话管理器230通知位于所指定的事件产生器180中的会话代理285来认证万维网客户。如果认证成功,则会话管理器230开始万维网客户117的远程消息传递会话410。
图7描述了一项处理的示例示意图,其中万维网客户向RMF服务器160预订事件。在图7中,万维网客户117通知RMF万维网客户120中的会话代理212来预订事件。会话管理器212发出相应的SubscribeEvent命令,并且消息传递代理215将SubscribeEvent命令编码为HTTP POST消息并将它发送到RMF服务器160中的会话管理器230。预订请求可以指定目标存储槽和与该存储槽相关联的事件。
当会话管理器230接收SubscribeEvent请求时,它检查消息板260中所指定的目标存储槽,并且与事件产生器中的过滤器代理290联系以检查访问权限。会话管理器230还与信道管理器235联系以选择专用于该请求的底层会话的一个信道420。然后,信道管理器235可以初始化该专用信道并且将该信道链接到适当的监听器代理245。监听器代理245监视所预订的来自消息板260中与它相关联的存储槽的事件。
图8描述了一项处理的示例示意图,其中万维网客户请求RMF服务器160监听所预订的事件。在图8中,会话管理器212发出ListenEvent命令,并且消息传递代理215将ListenEvent命令编码为HTTP POST并将它发送到RMF服务器160中的会话管理器230。监听事件请求可以指定底层会话,以便专用于该会话的信道可以被识别。
当会话管理器230接收ListenEvent请求时,它可以检验该会话并与专用于该会话的信道联系。会话管理器230命令信道开始监听。当存在任何由相应的监听器代理245添加的事件实例时,信道420将事件作为响应发送到在RMF万维网客户端的会话代理212。当会话代理212接收该响应时,它分析该响应并将事件发送到事件管理器220。事件管理器220识别适当的万维网客户117,然后向该万维网客户派送通知。
在图8中,只要在所指定的存储槽上有由事件产生器180进行的有关行为,消息板260就生成适当的事件并通知适当的监听器代理245。如果需要,监听器代理245调用位于事件产生器180中的过滤器代理290以在事件上进行所需的过滤操作。然后,监听器代理245将事件添加到适当的信道420。
图9描述了一项处理的示例示意图,其中事件产生器将它自身连接到RMF服务器160。事件产生器(例如180)首先向消息板260注册。这可以引起在消息板中的新的存储槽的创建。事件产生器180还可以向RMF服务器160注册会话代理。被注册的会话代理可以用于对一些万维网客户进行认证,所述万维网用户要预订与事件产生器相关联的事件。另外,作为注册的一部分,事件产生器还可以向RMF服务器160注册监听器代理,并且监听器代理可以与注册在该事件产生器名下的存储槽相关联。
图10到图13描述了根据本发明的万维网使能双向远程消息传递通信中的不同处理的示例流程图。所描述的动作和所表示的动作的顺序只是示例性的,而不是限制性的。
图10是符合本发明的万维网使能双向远程消息传递通信的示例流程图。在动作1020,远程消息传递会话基于万维网客户的请求,通过RMF万维网客户首先被建立。在会话过程中,在动作1030,万维网客户也通过RMF万维网客户向RMF服务器预订事件。在动作1040,基于该预订,RMF服务器监听事件。如果在动作1050在消息板上有任何满足所预订事件的数据操作,则在动作1060,RMF服务器160生成事件,并在动作1070(根据该预订)发送所观察的事件到相应的RMF万维网客户。一旦在动作1080收到该事件,RMF万维网客户就在动作1090派送该事件到万维网客户。
图11是在万维网使能双向消息传递通信中协助万维网客户的RMF万维网客户的示例流程图。RMF万维网客户首先在动作1110发送开始会话请求,以在相应的万维网客户和所指定的事件产生器之间通过RMF服务器建立远程消息传递会话。如果在动作1115确定出建立这样的会话的请求是不允许的,则在动作1120,处理结束。可以有不同的原因使RMF服务器拒绝来自万维网客户的会话请求。例如,对万维网客户进行的认证可能失败。另一个例子是万维网客户的访问权限可能被限制。
如果会话被建立(在动作1115确定),则RMF万维网客户在动作1125发送预订请求以向RMF服务器预订事件。预订请求也可能是不允许的,这在动作1130确定。如果预订是不允许的并且万维网客户可能试图预订其他事件,则处理返回动作1125。如果在动作1135确定不再有事件要被预订,则处理在动作1140结束。
当事件被成功预订时,万维网客户在动作1145向RMF服务器发送监听请求以监听事件。这在RMF万维网客户和RMF服务器之间发起了监听连接。通过监听连接,在服务器端,所预订的事件被连续地监视。预订可以就在消息板中的特定存储槽上执行的某个操作而被设置。所述操作可以直接与存储槽相关(例如,删除存储槽)或者可以与存储在存储槽的数据相关(例如,将数据插入存储槽或在存储槽中删除数据)。只要所指定的操作在特定存储槽上实际被执行,所预订的事件就发生。
在客户端,一旦监听连接被建立,RMF万维网客户就等待接收所预订的事件。万维网客户在动作1150接收事件。在动作1155被分析的事件可以被编码发送。各事件可以和与特定万维网客户的特定会话相关联的唯一标识符一起发送。这样的标识符在动作1160被识别。在动作1165,根据标识符,事件被派送到万维网客户。
图12是一项处理的示例流程图,其中RMF服务器与RMF万维网客户及事件产生器交互以促进万维网使能双向消息传递通信。在图12中,事件产生器首先在动作1205向RMF服务器16注册其自身。被注册的信息可以被存储在产生器注册表255(图4)中。在动作1210,RMF服务器(经由相应的RMF万维网客户)接收来自万维网客户的建立远程消息传递会话的请求。该请求可以指示和其建立所请求的会话的事件产生器。
基于该请求,RMF服务器160在动作1212认证万维网客户。这种认证可以检查万维网客户的访问权限。如果在动作1215检查出认证失败,则RMF服务器160在动作1220拒绝该请求。如果在动作1215确定出认证通过,则RMF服务器160在动作1225开始对于发出请求的万维网客户的远程消息传递会话。
在远程消息传递会话过程中,万维网客户可以向RMF服务器160预订事件。当万维网客户发送预订请求时,RMF服务器160在动作1230接收请求。基于该请求,RMF服务器160在动作1235执行该预订。另外,RMF服务器160在动作1240建立信道以分配给万维网客户并且在动作1245将该信道连接到监听器代理。监听器代理的选择是基于该预订的。例如,所选择的监听器代理被分配给与所预订的事件相关联的存储槽。
为了监所预订的事件,RMF服务器在动作1250建立监听连接。当事件被成功预订时,监听连接可以被自动建立。它还可以基于来自万维网客户的对建立监听连接的明确的请求而建立。后者是可能存在的,因为万维网客户可以临时断开监听连接而稍后恢复连接。
因为事件预订可以与在消息板中的某个存储槽上执行的某个操作相关联,所以RMF服务器160通过在动作1260监视在消息板中的各种存储槽上执行的操作来监听事件。如果与所预订事件相关联的操作在动作1262发生,则消息板260可以发送事件的通知到适当的监听器代理。与所预订的事件相关联的监听器代理在动作1265接收事件通知。
在发送事件到预订了事件的万维网客户之前,RMF服务器在动作1270确定是否有任何过滤操作要在该事件上执行。如果有,则在动作1275调用过滤器代理。这样的过滤器代理可以对应于位于RMF服务器160中的基本过滤器代理250或者位于底层事件产生器中的过滤器代理290(图4)。接着,在动作1280,事件被添加到专用于万维网客户的信道。
一旦通知被添加到专用于万维网客户的信道,信道管理器235就在动作1285转发该通知到万维网服务器155,以便在动作1290使用万维网协议编码该通知,然后,该通知在动作1295被发送到万维网客户。
图13是一项处理的示例流程图,其中事件产生器通过与RMF服务器接口来进行与万维网客户的双向远程消息传递通信。事件产生器首先在动作1310建立与事件产生器相关的访问控制简表的一部分。接着,它可以在动作1320向RMF服务器160注册其自身。事件产生器还可以在动作1330指定会话代理,该代理为事件产生器执行万维网客户的认证。
当万维网客户请求与事件产生器建立会话时,该请求可以首先被RMF服务器160处理,并且可以在开始所请求的会话之前进行认证。RMF服务器160可以调用事件产生器中的会话代理以执行认证。事件产生器在动作1340从RMF服务器接收认证请求,并且在动作1350,对发出请求的万维网客户进行认证。
事件产生器在动作1360通过RMF服务器API 265(图2)操作RMF服务器中的消息板。如果该操作符合所预订的事件的规范,则事件在RMF服务器160中生成,并且可以使用事件产生器中的过滤器代理被过滤。在这种情况下,RMF服务器160发送过滤事件的请求到事件产生器。事件产生器在动作1370接收过滤请求,并且在动作1380过滤该事件。
虽然已经参照某些举例说明的实施例描述了本发明,但是这里所使用的词语只是描述性的词语,而不是限制性的词语。在所附权利要求的范围内可以做出改变,而不脱离在其诸方面中的本发明的范围和精神。尽管已经参照特定结构、动作和材料描述了本发明,但是本发明不限于所公开的细节,而是扩展到所附权利要求范围内的所有等同结构、动作和材料。
附录ARMF客户API<pre listing-type="program-listing"><![CDATA[Class Session{ public static Session connect(URL url,String provider, String username,String passwd); public void disconnect(); public boolean check(); public boolean subscribe(String slotName,int eventMask, EventListener listener); public void unsubscribe(String slotName,EventListener listener); public DataItem query(String slotName,String item); public DataItem post(String slotName,String message,Vectorargs); public boolean postAsync(String slotName,String message,Vectorargs,ResponseListener response); public String getProvider(); public void setDisppatchMode(short mode); public void setSessionListener(SessionListener listener);}Interface SessionListener{ public void sessionAborted();}Interface RemoteEventListener{ public void handleEvent(ServerEvent event);}Interface ResponseListener{ public void handleResponse(DataItem result);}Class RemoteEvent{ public static short ALL_MASK=0×0177; public static short SLOT_MASK=0×0007; public static short SLOT_CREATED=0×001; public static short SLOT_DELETED=0×002; public static short SLOT_CLEARED=0×004; public static short DATA_MASK=0×0070; public static short DATA_POSTED O×010; public static short DATA_CHANGED=0×020; public static short DATA_DELETED=0×040; public static short PROV_MASK=0×0100; public static short PROV_REMOVED=0×0100; public int getEventType(); public String getSlotName(); public DataItem getDataItem(); public String getProducer(); public Date getTimeStamp();}Class DataItem{ public String getName(); public Object getValue(); public String getType(); public String getDescription();}]]></pre>附录BRMF服务器API<pre listing-type="program-listing"><![CDATA[Interface RMFRegistry{public boolean registerProvider(MessageBoard); public boolean registerProvider(MessageBoard,SessionAgent agent); public MessageBoard getProvider(String name); public boolean removeProvider(String name); public Boolean installSessionAgent(String provider,SessionAgentagent); public SessionAgent getSessionAgent(String provider); public Boolean removeSessionAgent(String provider); public boolean installFilterAgent(String prov,String slot,FilterAgent filter); public FilterAgent getFilterAgent(String prov,String slot); public void removeFilterAgent(String prov,String slot);}Interface SessionAgent{ public boolean authenticate(String provider,String u,String p); public void sessionEstablished(String sessionid,String provider,String usemame); public void sessionClosed(String sessionid,String provider,String username);}Interface FilterAgent{ public boolean checkSlotAccess(String user,String slotName); public boolean checkEventAceess(String user,String slotName,ICCEventevt); public boolean checkMessageAccess(String user,String slotName,StringmessageName);}]]></pre>附录C.消息板API
这部分列出了由MessageBoard(消息板)包定义的接口和类<pre listing-type="program-listing"><![CDATA[class MessageBoardpublic class MessageBoard{ public static final int SIMPLE_SLOT=1 public static final int TABLE_SLOT=2 public static final int ARRAY_SLOT=3 public static final int LIST_SLOT=4 public static final int QUEUE_SLOT=5 public static final int STACK_SLOT=6 public MessageBoard(String name,String masterKey); public Enumeration getSlotNames() public void clearAll(String key) public boolean contains(String slotName) public Slot createSlot(String slotName,int slotType) public Slot getSlot(String slotName) public void deleteSlot(String slotName) public void clearSlot(String slotName) public void subscribe(String slotName,short eventName, ICCEventListener listener) public void unsubscribe(StringslotName,short eventName, ICCEventListener listener)}class Slotpublic abstract class Slot{ public static short NO_NOTIFICATION=l; public static short ASYNCRONOUS_NOTIFICATION=2; public static short SYNCRONOUS_NOTIFICATION=3;protected Slot(String name,int typeCode) protected Slot(String name,int typeCode,String accessCode) public String getName() public String getTypeCode() public Boolean isPrivate() public abstract Boolean isEmpty() public boolean match(String code) public String getEventMode() public void setEventModee(int nType) public void subscribe(String eventName,ICCEventListener listener) public void unsubscribe(String eventName) public void addMessageHandler(MessageHandler handler) public void removeMessageHandler(String messageName) public DataItem post(String messageName,Vector argus) public boolean postAsync(String messageName,Vector argus,ResponseListener listener) protected void notify() protected abstract void clear()}class SimpleSlotpublic class SimpleSlot extends Slot{ public SimpleSlot(String name) public SimpleSlot(String name,String accessCode) public DataItem get() public void put(DataItem data) public Boolean isEmpty() public void clear()}class TableSlotpublic class TableSlot extends Slot{ public TableSlot(String name) public TableSlot(String name,String accessCode) public DataItem get(String itemName) public void put(DataItem data) public void remove(String itemName) public boolean contains(String itemName) public void clear() public Boolean isEmpty() public int size()}class QueueSlotpublic class QueueSlot extends Slot{ public QueueSlot(String name) public DataItem get() public void put(DataItem data) public void remove(Object o) public void contains(Object o) public void clear() public Boolean isEmpty() public void setLimit(int max) public int size()}class Dataltempublic classDataltem{public DataItem(String name,Object o) public String getName() public Object getData() public Object setData(Object o) public Class getDataType() public String getDataTypeName() public String getProducer() public void setProducer(String src) public long getTimeStamp()}interface ICCEventListenerpublic interface ICCEventListener{ void handleEvent(ICCEvent)}interface MessageHandlerpublic interface MessageHandler{ String getName() DataItem invoke(Vector args)}class ICCEventpublic abstract classes ICCEvent{ public static short SLOW_REVENT=0; public static short DATA_REVENT=1; public static short SLOT_CREATED=10; public static short SLOT_DELETED=11; public static short SLOT_CLEARED=12;public static short DATA_POSTED=101 public static short DATA_CHANGED=102; public static short DATA_DELETED=103; protected ICCEvent(short t,short n,String s) public int getEventType() public String getEventName() public String getSlotName()}class SlotEventpublic classSlotEvent extends ICCEvent{ public SlotEvent(short eventName,String slotName)}class DataEventpublic class DataEvent extends ICCEvent{ public DataEvent(short eventName,String slotName,String oldName,DataItem newItem) public String getOldItemName() public DataItem getNewItem()}class ArraySlotpublic class ArraySlot extends Slot{ public ArraySlot(String name) public DataItem get(int index) public void put(int index,DataItem data) public void remove(int index) public boolean contains(Object o)public int getIndex(Object o) public void clear() public boolean isEmpty() public int size()}class ListSlotpublic class ListSlot extends Slot{ public ListSlot(String name) public DataItem get(int index) public void put(DataItem data) public void insert(int index,Dataltem data) public void replace(int index,DataItem data) public void remove(int index) public boolean contains(Object o) public void clear() public boolean isEmpty() public int size() public Listlterator iterate(int index)}class ListIteratorpublic classListIterator{ public SetIterator(SetSlot s) public booleanhasNext() public DataItemgetNext()}class StackSlotpublic class StackSlot extends Slot{ public StackSlot(String name) public DataItem get() public void put(DataItem data) public void remove(Object o) public void contains(Object o) public void clear() public Boolean isEmpty() public int size()}]]></pre>
权利要求
1.一种系统,包括做出请求并接收响应的客户;万维网服务器,用于利用万维网协议转发来自所述客户的所述请求,并且将所述响应转发到所述客户;事件产生器,用于更新消息板;连接到所述万维网服务器的远程消息传递工具服务器,用于接收来自所述客户的所述请求,以及用于基于所述请求生成所述响应,所述响应针对事件而生成,所述事件由所述客户所预订的并且由所述更新所触发,所述更新由所述事件产生器在所述消息板上执行,所述响应经由所述万维网服务器被发送到所述客户。
2.如权利要求1所述的系统,其中,所述客户包括发起所述请求以及接收所述响应的万维网客户;和远程消息传递工具客户,其连接到所述万维网客户,用于经由所述万维网服务器和所述远程消息传递工具服务器,代表所述万维网客户管理在所述万维网客户和所述事件产生器之间的双向通信。
3.如权利要求2所述的系统,其中,所述万维网客户包括事件监听器。
4.一种远程消息传递工具客户,包括会话代理,用于管理在万维网客户和事件产生器之间建立的远程消息传递会话,以及用于维持持久的监听连接,所述监听连接监听由所述万维网客户向远程消息传递工具服务器所预订的事件;消息传递代理,用于在所述远程消息传递会话过程中代表所述万维网客户与所述远程消息传递工具服务器通信,发送来自所述万维网客户的请求到所述远程消息传递工具服务器,并且接收来自所述远程消息传递工具服务器的响应;消息分析器,用于分析由所述消息传递代理接收的来自远程消息传递工具服务器的响应;和事件管理器,用于管理事件预订以及用于事件的派送,所述事件由所述万维网客户预订,从所述远程消息传递工具服务器作为响应而接收,并且由所述消息分析器分析。
5.如权利要求4所述的远程消息传递工具客户,还包括远程消息传递工具客户应用编程接口,通过所述接口,所述万维网客户与所述远程消息传递工具客户通信以发出请求、预订事件以及从所述事件管理器接收来自所述远程消息传递工具服务器的响应。
6.一种远程消息传递工具服务器,包括会话管理器,用于管理经由远程消息传递工具客户而与万维网客户建立的远程消息传递会话,以及用于维持持久的监听连接,所述监听连接监听由所述万维网客户预订的事件,所述万维网客户在所述远程消息传递会话过程中经由所述远程消息传递工具客户发出请求并接收响应;信道管理器,用于管理零个或多个为预订事件而设计的信道,所述管理将各预订与信道相关联以存储所述所预订的事件的发生,并且发送被存储的各事件到所述远程消息传递工具客户,所述远程消息传递工具客户代表预订所述被存储的事件的所述万维网客户;和消息板,包括多个用于存储数据的存储槽,所述数据由至少一个事件产生器操作,所述消息板中的数据的操作触发不同的事件。
7.如权利要求6所述的远程消息传递工具服务器,还包括消息分析器,用于在生成由万维网客户经由远程消息传递工具客户发出的请求的响应之前分析所述请求;和多个监听器代理,其中每个对应于所述消息板中不同的存储槽,并且连接到至少一个存储与所述存储槽相关的所预订的事件的信道,各监听器代理监听在所述存储槽中发生的所述所预订的事件,并且发送所述所预订的事件到对应的信道。
8.如权利要求7所述的远程消息传递工具服务器,还包括产生器注册表,用于注册至少一个所述事件产生器;访问控制简表,用于记录由所述会话管理器在管理对于万维网客户的远程消息传递会话中所使用的访问控制信息;和基本过滤器代理,其连接到所述监听器代理,用于在发送所预订的事件到对应的信道之前,过滤所述所预订的事件。
9.如权利要求8所述的远程消息传递工具服务器,还包括远程消息传递工具服务器应用编程接口,通过所述接口,至少一个所述事件产生器与所述远程消息传递工具服务器通信以注册、操作所述消息板以及与所述万维网客户通信。
10.一种事件产生器,包括数据生成器,用于生成要被张贴到远程消息传递工具服务器的消息板上的数据;和数据操作器,用于使用由所述数据生成器生成的数据来操作所述消息板。
11.如权利要求10所述的事件产生器,还包括会话代理,用于对万维网客户进行认证,所述万维网客户请求经由远程消息传递工具客户和所述远程消息传递工具服务器在所述万维网客户和所述事件产生器之间建立远程消息传递会话,所述认证由所述远程消息传递工具服务器请求;和过滤器代理,用于过滤事件,所述事件要从所述远程消息传递工具服务器经由所述远程消息传递工具客户被发送到所述万维网客户。
12.一种用于万维网使能双向远程消息传递的方法,包括经由远程消息传递工具客户和远程消息传递工具服务器在万维网客户和事件产生器之间建立远程消息传递会话,所述远程消息传递工具客户连接到所述万维网客户,所述远程消息传递工具服务器连接到所述事件产生器,所述万维网客户在所述远程消息传递会话过程中发出请求并接收响应;由所述万维网客户经由所述远程消息传递工具客户预订事件,所述事件与由所述事件产生器在位于所述远程消息传递工具服务器中的消息板的存储槽上所执行的动作相关;由所述远程消息传递工具服务器中的监听器代理监听所述事件,所述监听器代理连接到专用于所述万维网客户的信道和所述存储槽,当与所述事件相关联的所述动作由所述事件产生器在所述存储槽上执行时,所述监听器代理接收通知;以及从所述远程消息传递工具服务器经由万维网服务器和所述远程消息传递工具客户派送所述通知到所述万维网客户,所述通知由所述万维网服务器使用万维网协议编码以生成响应。
13.如权利要求12所述的方法,其中,所述请求包括以下的至少一个开始会话请求,用于开始远程消息传递会话;结束会话请求,用于结束远程消息传递会话;检查会话请求,用于检查远程消息传递会话的状态;预订事件请求,用于向所述远程消息传递工具服务器预订事件;取消预订事件请求,用于结束向所述远程消息传递工具服务器的事件预订;查询数据请求,用于询问所述消息板中的数据项;监听事件请求,用于开始监听连接;和张贴消息请求,用于从所述万维网客户张贴消息到与所述消息板中的存储槽相关联的消息处理器。
14.如权利要求13所述的方法,其中,所述请求使用万维网协议被编码。
15.如权利要求14所述的方法,其中,所述响应由所述万维网服务器使用万维网协议编码。
16.如权利要求15所述的方法,其中用于对所述请求编码的所述万维网协议包括超文本传输协议;以及由所述万维网服务器用来对所述响应编码的所述万维网协议包括超文本传输协议。
17.如权利要求14所述的方法,其中,所述建立包括由所述万维网客户经由所述远程消息传递工具客户和所述万维网服务器发送开始会话请求到所述远程消息传递工具服务器以建立所述远程消息传递会话;认证相对于所述事件产生器的所述万维网客户以产生肯定或否定的判断;以及如果所述判断是肯定的,则由所述远程消息传递工具服务器中的会话管理器开始所述远程消息传递会话。
18.如权利要求17所述的方法,其中,所述预订包括发送预订事件请求到所述会话管理器以预订所述事件,所述预订事件请求指定所述存储槽和所述动作;由所述会话管理器建立信道以存储所述事件的发生;以及将所述信道和与所述消息板的所述存储槽相关联的所述监听器代理连接。
19.如权利要求17所述的方法,其中,所述监听包括发送监听事件请求到所述远程消息传递工具服务器;建立用于在所述预订中被预订的所述事件的监听连接,所述监听连接与专用于所述万维网客户的所述信道相关联;由连接到所述信道和所述存储槽二者的所述监听器代理监视由所述事件产生器在所述存储槽上执行的触发所述事件的所述动作;当所述动作由所述事件产生器执行时,接收对应于所述所预订的事件的通知;以及由所述监听器代理将所述通知添加到所述信道。
20.如权利要求19所述的方法,还包括在将所述通知添加到所述信道之前,过滤所述通知。
21.如权利要求19所述的方法,其中,所述派送包括由管理所述信道的信道管理器转发所述通知到所述万维网服务器;由所述万维网服务器使用所述万维网协议对所述通知编码以生成所述响应;以及经由所述远程消息传递工具客户发送所述响应到所述万维网客户。
22.一种用于远程消息传递工具客户的方法,包括为万维网客户经由万维网服务器发送开始会话请求到远程消息传递工具服务器以建立远程消息传递会话;如果由所述开始会话请求所请求的所述远程消息传递会话被建立,则发送预订事件请求到所述远程消息传递工具服务器以预订事件,所述预订事件请求指定所述远程消息传递工具服务器中的消息板上的存储槽和动作,其中所述事件依照由事件产生器在所述存储槽上执行的动作而被定义;经由所述万维网服务器从所述远程消息传递工具服务器接收响应,所述响应使用万维网协议对所预订的所述事件的通知编码;以及派送所述通知到所述万维网客户。
23.如权利要求22所述的方法,还包括在所述接收之前,发送监听事件请求到所述远程消息传递工具服务器以建立监听所述事件的监听连接;在所述接收之后,根据所述万维网协议解码所述响应以获得所述事件;以及在所述派送所述通知到所述万维网客户之前,分析所述通知。
24.一种用于远程消息传递工具服务器的方法,包括基于经由远程消息传递工具客户和万维网服务器从万维网客户发送的开始会话请求,建立远程消息传递会话;基于指定了所述远程消息传递工具服务器中的消息板上的存储槽和动作的预订事件请求,预订事件,其中所述事件依照由事件产生器在所述存储槽上执行的动作而被定义;由被监听事件请求激活的监听器代理监听所述事件,所述监听器代理连接到为所述远程消息传递会话建立的信道和所述存储槽,并且当与所述事件相关联的所述动作由所述事件产生器在所述存储槽上执行时,生成所述事件的通知;以及经由所述万维网服务器和所述远程消息传递工具客户,派送所述事件的所述通知到所述万维网客户作为响应,所述通知由所述万维网服务器使用万维网协议被编码以生成所述响应。
25.如权利要求24所述的方法,其中,所述建立包括从所述万维网客户接收所述开始会话请求;认证所述万维网客户;以及如果所述认证通过,则开始所述远程消息传递会话。
26.如权利要求24所述的方法,其中,所述预订包括从所述万维网客户接收所述预订事件请求;建立与所述远程消息传递会话相关联的信道;以及将所述信道连接到与所述消息板的所述存储槽相关联的监听器代理。
27.如权利要求24所述的方法,其中,所述监听包括监视所述消息板上的所述存储槽以观察与将由所述事件产生器在所述存储槽上执行的动作相关的事件;当观察到所述事件时,接收所述通知;以及将所述通知添加到为所述远程消息传递会话建立的所述信道。
28.如权利要求27所述的方法,还包括在所述添加之前,由过滤器代理过滤所述通知。
29.如权利要求24所述的方法,其中,所述派送包括由所述信道转发所述通知到所述万维网服务器;由所述万维网服务器使用所述万维网协议对所述通知编码以生成所述响应;以及经由所述远程消息传递工具客户发送所述响应到所述万维网客户。
30.如权利要求24所述的方法,还包括向所述远程消息传递工具服务器中的所述消息板注册所述事件产生器。
31.如权利要求30所述的方法,还包括指定会话代理,所述会话代理为所述事件产生器认证万维网客户;以及指定过滤器代理,所述过滤器代理过滤与所述事件产生器相关联的所观察到的事件。
32.如权利要求30所述的方法,还包括由事件产生器更新所述消息板的存储槽。
33.一种用于事件产生器的方法,包括向远程消息传递工具服务器的消息板注册;以及更新所述消息板的存储槽。
34.如权利要求33所述的方法,其中,所述更新包括以下操作的至少一个创建存储槽;清除存储槽;删除存储槽;在存储槽中张贴数据;在存储槽中删除数据;以及在存储槽中改变数据。
35.如权利要求33所述的方法,还包括建立访问控制简表。
36.如权利要求35所述的方法,还包括指定会话代理,所述会话代理为所述事件产生器认证万维网客户;以及指定过滤器代理,所述过滤器代理过滤与所述事件产生器相关联的所观察到的事件。
37.如权利要求36所述的方法,还包括在所述指定会话代理之后,接收来自所述远程消息传递工具服务器的认证万维网客户的请求,所述万维网客户请求与所述远程消息传递工具服务器建立远程消息传递会话;根据所述访问控制简表,由所述会话代理认证所述万维网客户。
38.如权利要求36所述的方法,还包括在所述指定过滤器代理之后,从所述远程消息传递工具服务器中的监听器代理接收过滤与所述事件产生器相关联的事件的通知的请求;以及过滤所述通知。
39.一种由用于万维网使能双向远程消息传递的程序编码的计算机可读介质,所述程序包括经由远程消息传递工具客户和远程消息传递工具服务器在万维网客户和事件产生器之间建立远程消息传递会话,所述远程消息传递工具客户连接到所述万维网客户,所述远程消息传递工具服务器连接到所述事件产生器,所述万维网客户在所述远程消息传递会话过程中发出请求并接收响应;由所述万维网客户经由所述远程消息传递工具客户预订事件,所述事件与由所述事件产生器在位于所述远程消息传递工具服务器中的消息板的存储槽上所执行的动作相关;由所述远程消息传递工具服务器中的监听器代理监听所述事件,所述监听器代理连接到专用于所述万维网客户的信道和所述存储槽,当与所述事件相关联的所述动作由所述事件产生器在所述存储槽上执行时,所述监听器代理接收通知;以及从所述远程消息传递工具服务器经由万维网服务器和所述远程消息传递工具客户派送所述通知到所述万维网客户,所述通知由所述万维网服务器使用万维网协议编码以生成响应。
40.如权利要求39所述的介质,其中,所述建立包括由所述万维网客户经由所述远程消息传递工具客户和所述万维网服务器发送开始会话请求到所述远程消息传递工具服务器以建立所述远程消息传递会话;认证相对于所述事件产生器的所述万维网客户以产生肯定或否定的判断;以及如果所述判断是肯定的,则由所述远程消息传递工具服务器中的会话管理器开始所述远程消息传递会话。
41.如权利要求39所述的介质,其中,所述预订包括发送预订事件请求到所述会话管理器以预订所述事件,所述预订事件请求指定所述存储槽和所述动作;由所述会话管理器建立信道以存储所述事件的发生;以及将所述信道和与所述消息板的所述存储槽相关联的所述监听器代理连接。
42.如权利要求39所述的介质,其中,所述监听包括发送监听事件请求到所述远程消息传递工具服务器;为在所述预订中被预订的所述事件建立监听连接,所述监听连接与专用于所述万维网客户的所述信道相关联;由连接到所述信道和所述存储槽二者的所述监听器代理监视由所述事件产生器在所述存储槽上执行的触发所述事件的所述动作;当所述动作由所述事件产生器执行时,接收对应于所述所预订的事件的所述通知;以及由所述监听器代理将所述通知添加到所述信道。
43.如权利要求42所述的介质,还包括在将所述通知添加到所述信道之前,过滤所述通知。
44.如权利要求42所述的介质,其中所述派送包括由管理所述信道的信道管理器转发所述通知到所述万维网服务器;由所述万维网服务器使用所述万维网协议对所述通知编码以生成所述响应;以及经由所述远程消息传递工具客户发送所述响应到所述万维网客户。
45.一种由用于远程消息传递工具客户的程序编码的计算机可读介质,所述程序包括为万维网客户经由万维网服务器发送开始会话请求到远程消息传递工具服务器以建立远程消息传递会话;如果由所述开始会话请求所请求的所述远程消息传递会话被建立,则发送预订事件请求到所述远程消息传递工具服务器以预订事件,所述预订事件请求指定所述远程消息传递工具服务器中的消息板上的存储槽和动作,其中所述事件依照由事件产生器在所述存储槽上执行的所述动作而被定义;经由所述万维网服务器从所述远程消息传递工具服务器接收响应,所述响应使用万维网协议对所预订的所述事件的通知编码;以及派送所述通知到所述万维网客户。
46.如权利要求45所述的介质,还包括在所述接收之前,发送监听事件请求到所述远程消息传递工具服务器以建立监听所述事件的监听连接;在所述接收之后,根据所述万维网协议解码所述响应以获得所述事件;以及在向所述万维网客户的所述派送之前,分析所述通知。
47.一种由用于远程消息传递工具服务器的程序编码的计算机可读介质,所述程序包括基于经由远程消息传递工具客户和万维网服务器从万维网客户发送的开始会话请求,建立远程消息传递会话;基于指定了所述远程消息传递工具服务器中的消息板上的存储槽和动作的预订事件请求,预订事件,其中所述事件依照由事件产生器在所述存储槽上执行的所述动作而被定义;由被监听事件请求激活的监听器代理监听所述事件,所述监听器代理连接到为所述远程消息传递会话建立的信道和所述存储槽,并且当与所述事件相关联的所述动作由所述事件产生器在所述存储槽上执行时,生成所述事件的通知;以及经由所述万维网服务器和所述远程消息传递工具客户,派送所述事件的所述通知到所述万维网客户作为响应,所述被观察到的事件由所述万维网服务器使用万维网协议被编码以生成所述响应。
48.如权利要求47所述的介质,其中,所述建立包括从所述万维网客户接收所述开始会话请求,认证所述万维网客户;以及如果所述认证通过,则开始所述远程消息传递会话。
49.如权利要求47所述的介质,其中,所述预订包括从所述万维网客户接收所述预订事件请求;建立与所述远程消息传递会话相关联的信道;以及将所述信道连接到与所述消息板的所述存储槽相关联的监听器代理。
50.如权利要求47所述的介质,其中,所述监听包括监视所述消息板上的所述存储槽以观察与将由所述事件产生器在所述存储槽上执行的所述动作相关的事件;当观察到所述事件时,接收事件通知;以及将所述通知添加到为所述远程消息传递会话建立的所述信道。
51.如权利要求47所述的介质,所述程序还包括在所述添加之前,由过滤器代理过滤所述通知。
52.如权利要求47所述的介质,其中,所述派送包括由管理所述信道的信道管理器转发所述事件的通知到所述万维网服务器;由所述万维网服务器使用所述万维网协议对所述事件的通知编码以生成所述响应;以及经由所述远程消息传递工具客户发送所述响应到所述万维网客户。
53.如权利要求47所述的介质,所述程序还包括向所述远程消息传递工具服务器中的所述消息板注册所述事件产生器。
54.如权利要求53所述的介质,所述程序还包括由事件产生器更新所述消息板的存储槽。
55.一种由用于事件产生器的程序编码的计算机可读介质,所述程序包括向远程消息传递工具服务器的消息板注册;以及更新所述消息板的存储槽。
56.如权利要求55所述的介质,其中,所述更新包括以下操作的至少一个创建存储槽;清除存储槽;删除存储槽;在存储槽中张贴数据;在存储槽中删除数据;以及在存储槽中改变数据。
57.如权利要求55所述的介质,所述程序还包括建立与所述事件产生器相关联的访问控制简表。
58.如权利要求57所述的介质,所述程序还包括指定会话代理,所述会话代理为所述事件产生器认证万维网客户;以及指定过滤器代理,所述过滤器代理过滤与所述事件产生器相关联的事件的通知。
59.如权利要求58所述的介质,所述程序还包括在所述指定会话代理之后,接收来自所述远程消息传递工具服务器的认证万维网客户的请求,所述万维网客户请求与所述远程消息传递工具服务器建立远程消息传递会话;根据所述访问控制简表,由所述会话代理认证所述万维网客户。
60.如权利要求58所述的介质,所述程序还包括在所述指定过滤器代理之后,从所述远程消息传递工具服务器中的监听器代理接收过滤与所述事件产生器相关联的事件的通知的请求;以及过滤所述事件的所述通知。
全文摘要
本发明描述了一种万维网使能双向远程消息传递机制,该机制允许客户基于预订从事件产生器接收即时通知以访问由该事件产生器生成的数据,并且递送消息到该事件产生器。
文档编号H04L29/08GK1543738SQ02816043
公开日2004年11月3日 申请日期2002年6月13日 优先权日2001年6月20日
发明者格伦·夏尔斯, 格伦 夏尔斯, 庄, 戴维·庄 申请人:英特尔公司