基于流的反应性编程平台的制作方法

文档序号:12287985阅读:302来源:国知局
基于流的反应性编程平台的制作方法与工艺

在计算领域中,许多场景涉及包括流的架构,所述流用于向流项目的订户通知例如新流项目的规定、观察到的变量的变化或在计算框架内的事件。在这种模型中,自发地向订户通知新流项目(例如,无需针对更新轮询订阅的数据源),并且以流的方式将数据项输送到订户,例如,根据通过数据源将数据项插入到流的次序,将数据项的序列输送给订户。

作为第一个这种例子,在简易信息聚合(RSS)公布/订阅馈送中,用户可能在一个或多个公布商建立新的公布(例如,发布在网站的文章)时请求通知。聚合主机可以通过周期性检查订阅的公布商、取回新的聚合项并将其呈现给用户而完成请求。

作为第二个这种例子,在面向对象的观察模型中,当第一对象的属性实例化时(例如,对象的成员字段,或者经由用户输入可控制的视觉用户界面的值),可以自动创建流用于更新属性。第二对象可以请求订阅流,并因此可以在属性变化时被自发地通知。

作为第三个这种例子,在事件流模型中,事件源可以提供事件流,并在检测到事件的实例时可以将事件通知插入到事件流。对象可以请求订阅事件流,并且事件平台可以将事件通知输送到对象,以便完成对象的订阅请求。在计算领域中出现的多种场景中,可以设计和使用许多这种基于订阅的流。



技术实现要素:

提供该“发明内容”是为了引入将在下文“具体实施方式”中进一步描述的简化形式的概念选择。该“发明内容”并不意图识别所要求保护主题的关键因素或必要特征,并且也不意图用于限制所要求保护主题的范围。

在许多基于订阅的流模型中,通过计算环境(例如,操作系统可以自动生成使用中的对象的各个字段的流)、用户(例如,网络内容的作者可以配置网站来提供新内容项目的流)和/或流源(例如,类别可以指定相应对象可以提供流,以及指定对象如何将流项目插入到流)来指定数据流的存在和特性。然而,这些模型不能使得订户创建流以便观察源;即,如果源不能提供流,则观察者仅能够利用替代技术,例如轮询,以便实现对源的观察。另外,这种模型还仅为用户提供有限容量来创建和/或改变流。例如,一些流模型可以使得特定的观察者能够指定流过滤器,并仅接收插入到流中的一些流项目。然而,该流过滤器不改变流的内容,且不影响提供给订阅了同一流的其他观察者的流项目;每个这种其他订户可以指定流过滤器或者接收流的完整内容。

本文提出了一种基于流的反应性编程平台,其中一组观察者不仅可以观察由源提供的流,而且还可以指定观察者可以订阅的新的流。根据这些技术,观察者可以提交指定数据源的属性上的条件的查询(例如,股票报告的特定股票的值超过价格上限),并且编程平台可以生成用于查询的流。观察者和其他观察者然后可以订阅流,并且编程平台可以登记这种观察者为流的订户。当编程平台检测到完成查询的条件时,编程平台可以将表示完成查询的新的流项目插入到流中,并可以将流项目输送到流的所有订户。

本文提供的基于流的反应性编程平台可以扩展到多个方面。作为第一个这种例子,请求订阅流的观察者可以监视流项目,或者可以指定或提供代表观察者监视流项目的代理。作为第二个这种例子,观察流的观察者还可以包括流的源;例如,观察者可以将流项目公布到流以及接收由其他源公布的流项目到同一流。作为第三个这种例子,基于流的反应性编程平台的元素(例如,观察者、源、流和订阅)可以支持共享集合的属性。例如,通过影响每个这种元素的功能的参数的规定进行参数化。作为第四个这种例子,基于流的编程平台可以以支持与用户到服务和用户到设备的方式等价的服务到服务、服务到设备和设备到设备通信的方式提供,从而每个元素的功能被暴露并可用于反应性基于流的编程平台的任意其它元素。根据本文提出的技术,本文提供的基于流的编程平台的这些和其它变型可以呈现反应性编程模型,其支持通过由观察者指定的源生成和改变流。

为了完成前述和相关目的,后续描述和附图阐述了特定的图示方面和实现方式。这些仅表示可以采用一个或多个方面的各种方式中的几个。当结合附图考虑时,根据后续详细描述,本公开其它方面、优点和新颖特征将变得清晰。

附图说明

图1是以用于向对象通知对对象字段的更新的第一基于流的公布/订阅技术为特征的示例性场景的图示。

图2是以用于向对象通知在计算环境中出现的事件的第二基于流的公布/订阅技术为特征的示例性场景的图示。

图3是以根据本文提出的技术提供的基于流的反应性编程平台为特征的示例性场景的图示。

图4是根据本文提出的技术,使用基于流的反应性编程平台代表观察者完成查询的示例性方法的图示。

图5是根据本文提出的技术示出配置为提供基于流的反应性编程平台来代表客户完成查询的示例性服务器的部件框图。

图6是包括配置为实现本文阐述的一个或多个规定的处理器可执行指令的示例性计算机可读介质的图示。

图7是根据本文提出的技术以用于基于数据项的联合生成对源的属性的更新的流的技术为特征的示例性场景的图示。

图8是根据本文提出的技术以根据参数化查询生成的流为特征的示例性场景的图示,相应参数绑定到基于流的反应性编程平台的对象。

图9是根据本文提出的技术以通过基于流的反应性编程平台提供的代理可访问的对象的目录为特征的示例性场景的图示。

图10是根据本文提出的技术以在基于流的编程平台中委托查询的方面的设备和服务的联合为特征的示例性场景的图示。

图11是可以实现和/或使用本文技术的一部分的示例性计算环境的图示。

具体实施方式

现在将结合附图描述所要求保护的主题,其中遍及附图中类似的附图标记用于指代类似的元素。在后续描述中,出于解释的目的,阐述了多个特定细节以便提供对所要求保护主题的透彻理解。然而,显然的是,可以在没有这些特定细节的情况下实践所要求保护的主题。在其它实例中,在框图中示出结构和设备,以便于描述所要求保护的主题。

A.引言

在计算领域中,许多场景涉及基于订阅的流,其中流的源公布一组流项目,其依次输送到一个或多个订户。在这种场景中,观察者可以将订阅请求提交给流管理器,并可以经由流从源接收流项目直到将取消订阅请求提交给流管理器。基于订阅的流的概念可应用于计算的许多区域中,其中源和订户可以包括例如,人、设备、应用或数据源或其组合。

涉及基于订阅的流的第一场景是简易信息聚合(RSS)协议,其中数据源可以生产并更新流项目的列表。用户可以请求聚合读者周期性检索列表,并在聚合读者发现新的流项目添加到列表时通知用户。

图1是以在数据绑定模型中使用基于订阅的流的技术以便使得对象102能够观察到其它对象102的字段104的改变为特征的示例性场景100的图示。在该示例性场景100中,当第一对象102实例化为包括两个字段104(例如,整数和布尔值)时,数据绑定平台110可以为对象102的各个字段104生成流106,其它对象102可以对其进行订阅以便观察第一对象102的字段104的改变。当对象102的字段104改变时,如果没有其它对象102订阅字段104的流106,则订阅平台110可以不采取行动;但是如果至少一个对象102订阅流106,则数据绑定平台110可以生成表示字段104的更新的通知116的流项目108,并将流项目108插入到流106中。因此,当第二对象102提交订阅请求112以订阅对应于第一对象104的第二字段104的第二流106时,数据绑定平台110可以为第二对象存储订阅114。当第一对象102的第二字段104变化时,数据绑定平台110可以生成表示字段104的新值的流项目108,并可以向第二对象102发送流项目108的通知116。以这种方式,流106可以用于数据绑定模型,以向对象102通知其它对象102的字段104的更新。

图2呈现示例性场景200的图示,其涉及提供的基于订阅的流以便向对象102通知在计算环境中出现的事件202。在该示例性场景200中,事件源202检测或识别一系列事件206,例如,通过用户输入设备接收用户输入、通过设备完成任务。可以生成包括各个事件206的流项目108的序列的流事件204。两个对象102可以订阅事件流204,并且计算环境可以记录每个对象102的订阅114。显著地,在该示例性场景200中,事件流204允许对象102指定表明对对象102感兴趣的事件206过滤器208;例如,如果事件206涉及在变量中存储的值的变化,则第一对象102可以订阅所有这种事件206,而第二对象102可以指定表明只订阅值超过特定阈值的事件206的过滤器208。因此,事件流204可以向第一对象102输送表示事件流204的各个事件206的通知116的完整集合的更新210(并可以与事件源202检测到的事件206的次序一致地接收这种更新210),而第二对象102可以只接收满足过滤器208的事件206的更新210。以这种方式,计算环境可以使得对象102能够通过基于订阅的事件流204接收事件源202的事件206的通知。

虽然在计算领域中使用了许多这种基于流的技术,包括在图1和图2的示例性场景中示出的那些,但是这种技术的实施例通常展现出一个或多个限制。

作为第一示例性限制,许多基于订阅的流平台对支持观察者发现可用流106提供较少帮助或不提供帮助。例如,在图2的示例性场景200中,对象102仅能够在事件源202被开发者已知时请求订阅114事件源202;例如,开发者可以发现事件源202的存在和标识符,并可以对各个对象102编程以对其进行订阅,但是该开发者和对象102都不在该过程中从计算环境接收显著帮助。在该方面和其它方面,许多这种基于订阅的流平台取决于开发者的介入,而不是便于对象102自发发现流106。

作为第二示例性限制,许多基于订阅的流平台通常不允许对象102创建新的流106,尤其是当这种流106不明确由对象102管理时。而是,可以允许第二对象102订阅由第一对象102创建或由基于订阅的流平台为第一对象自动创建的流106,但不允许第二对象102指定新的流106可应用于第一对象102。例如,期望的是,对象102订阅涉及比较不同类型的对象或源的属性的流106,例如比较对股票报价系统感兴趣的各种股票价格,并生成包括表示事件206(例如,股票价格的显著不同的发生)的流项目106的流106。然而,除非对象102包括用于自动生成流106的逻辑(例如,轮询数据源并识别这种事件206),否则基于订阅的流平台通常不帮助生成新流106的过程。

作为第三示例性限制,许多基于订阅的流平台不允许订户改变流106的内容。虽然订户可以选择忽视一些流项目108(例如,指定使得能够订阅流项目108的子集的过滤器208)。但是这种过滤器不指定或改变插入到流106的流项目108,而是使得订户能够忽视一部分流106。显著地,即使第一对象102应用过滤器208到流106通常不影响第二对象102订阅114同一流106。以这种方式,基于订阅的流平台通常不允许对象102改变流106的不具体由对象102管理的操作。

B.呈现技术

图3呈现了根据本文提出的技术以提供的基于订阅的流平台302为特征的示例性场景300的图示。在该示例性场景300中,在第一时间320,流平台302从观察者312接收指定分别包括属性306的两个源304的查询308(例如,第一对象102和第二对象102,每个对象102包括字段104;或者第一网站和第二网站,每个网站包括数据),以及可应用于源304的属性306的条件310(例如,表明第一源304的第一属性306大于第二源304的第二属性306的数值比较)。流平台302因此可以代表观察者312发起查询308的流106。在发起流106时,流平台302还可以为流106分配标识符(例如,统一资源标识符(URI))和/或将流106添加到可发现流的目录上,以便帮助对象102参考和发现流106。

在第二时间322,流平台302可以从观察者312接收指定流106的订阅请求114,并可以记录将观察者312作为流106的订户318添加的订阅114。

在第三时间324,流平台302可以检测完成查询308的条件310的一个或多个实例(例如,通过周期性查询源304以检测完成条件310的源304的属性306的更新,或者通过从源304接收表明导致完成条件310的属性306的改变的通知)。可以通过识别流106的订户318,并向订户318输送分别表明完成查询308的条件310的实例的流项目316,流平台302可以响应于检测到的完成条件310的实例。以这种方式,根据本文提出的技术,流平台302可以完成由观察者312呈现的查询308。

C.技术效果

根据本文提出的技术,提供流平台302(例如,在图3的示例性场景300中示出的)与其它技术相比可以呈现多种技术效果,包括在图1的示例性场景100和图2的示例性场景200中示出的那些。

作为第一例子,本文提出的流平台302便于观察者312以自动方式发现流106。例如,在一些变型中,通过向流106分配标识符(例如,统一资源标识符),和/或将流106添加到观察者312请求的目录,流平台302可以响应于创建流106的请求。在其它基于订阅的流平台中,例如在图1的示例性场景100中的数据绑定平台110,在实例化资源304时,平台可以为源304的一个或多个属性306自动发起流106,但是该发起通常不包括向观察者312通知新创建的流106;而是,这种观察者312仅能够在已知存在实例化源304时访问流106。此外,本文提出的流平台302允许为源304发起不向观察者312提供用于流式传送更新的容量的流106,并且不意图进行这种监视和通知。

作为第二例子,本文提出的流平台302使得观察者312能够通过提交指定源304、属性306和条件310的查询308来创建流106。流平台302自动发起反映查询308的流106。因此,观察者312不必实现流106的任何方面,包括观察源304的属性306和/或将新流项316插入到流106。相反,许多计算平台使得源304能够发起和公布流106以及插入流项目316,但是不提供帮助实现该功能;源304不得不实现流106的细节。

作为第三例子,本文提出的流平台302可以使得观察者312能够指定包括条件310的查询308,所述条件310包括代表观察者312监视的多种源304和/或属性306。例如,观察者312可以提交指定股票信息的两个或更多源304和涉及比较源304的属性306(例如,比较由第一股票数据库表明的第一股票的股票价格和由第二股票数据库表明的第二股票价格)的条件310的查询308。代表观察者312发起的流106因此可以展现更复杂的条件310,其涉及多种源304和属性306,可以跨对象、设备甚至域。这种复杂的流可能不能在传统的流平台中实现,传统的流平台通常在每个对象102的请求下生成流106,并仅在对象102的域上(例如,数据绑定对象102的流106可以限于对对象102的字段104的更新)。此外,流平台302自动生成基础设施以检测条件310的完成,其中这种基础架构可能涉及例如监视多种源304。观察者312因此可以接收完成这种复杂条件而无需提供任意这种监视和评估的实现的通知。

作为第四例子,本文提出的流平台302可以使得观察者312能够以影响流106的其他观察者312的方式指定或修改流106的操作。例如,观察者312可以根据特定查询308请求发起流106,或者可以更新由流106表示的查询308,并且相同流106的其他观察者312因此可以接收特定或不同集合的流项目316。相反地,其它流平台通常不允许观察者312指定或修改流106;而是,通常将观察者312限制到订阅和/或取消订阅流106。即使在观察者312提交排除观察者312不感兴趣的流项目206的通知的过滤器208的场景中,由第一观察者312提供的过滤器208通常不改变流106到同一流106的第二观察者312的表示。

作为第五例子,本文提出的流平台302可以使得观察者312能够作为源304参与流106。也就是说,虽然许多流模型将流106中的各自参与者限定到观察者312或源304的角色,但是本文提供的流平台302可以使得观察者312还能够将流项目312公布到流106。替代地或另外,观察者312可以包括请求订阅114流106和/或观察公布到流106的流项目312的实体;即,实体可以请求流平台302向其通知公布到流106的流项目312,可以指定通知这种公布流项目312的第二实体,和/或可以提供通知这种公布的流项目312并代表实体评估和响应这种流项目312的代理。

作为第六例子,本文提出的流平台302可以在流平台的元素中提供共享集合的属性。作为一个这种例子,流平台302可以支持用于各个流106、源304、观察者312以及可能影响每个这种元素的功能的订阅114的参数的规范。例如,可以根据流项目类型(例如,在流106中公布的流项目312的类型)模板化各个元素,并且任意元素可以具有指向指定作为参数的特定类型的流项目312的功能,从而在流中涉及的所有元素可以互操作地配置为对应地响应于感兴趣的流项目类型。

作为第七例子,本文提出的流平台302可以便于在设备和/或服务的分布式集合中委托和联合计算过程。由于流平台302可实现的健壮性和灵活性,由流平台302提供的灵活性可以使得能够通过发现能够执行查询的各个任务的多种设备和服务来完成查询,并可以创建支持所选设备和服务的互操作以完成查询的流。根据本文提出的技术,可以通过代表观察者312通过提供流平台302完成查询308,来实现这些和其它技术效果。

D.示例性实施例

图4呈现了本文提出的技术的示例性第一实施例的图示,示出为通过提供流平台302代表观察者312完成查询308的示例性方法400。示例性方法400例如可以实现为存储于具有处理器的设备的存储器部件(例如,存储器电路、硬盘驱动盘、固态存储设备、或者磁盘或光盘)中的指令集,其中所述指令在处理器上执行时使得设备根据本文提出的技术操作。示例性方法400开始于402,并涉及在设备的处理器上执行404指令。特别地,在处理器上执行指令使得设备在从观察者312接收到包括涉及源304的属性306的条件310的查询308时,代表观察者312针对查询310发起406流106。在处理器上执行指令还使得设备在从观察者312接收到流106的订阅请求112时,将观察者312作为流106的订户318进行添加408。在处理器上执行指令还使得设备在检测到410完成查询308的条件310时,识别412流106的至少一个订户318;以及向流106的订户318输送414表明完成查询308的条件310的流项目108。通过呈现表明完成查询308的流106的流项目108,在处理器上执行指令使得设备提供根据本文提出的技术操作的流平台302,并因此示例性方法400在416处结束。

图5呈现出本文提出的技术的第二示例性实施例的图示,示出为示例性服务器502,在其上实现示例性系统506用于向在各种客户端514上执行的观察者312通知完成查询308。示例性系统506的各个部件可以例如实现为存储于示例性服务器502的存储器部件中的指令,当在示例性服务器502的处理器504上执行时,所述指令使得示例性服务器502执行至少一部分本文提出的技术。替代地(虽然未示出),示例性系统506的一个或多个部件例如可以实现为易失性或非易失性逻辑电路,例如特别设计的半导体上芯片(SoC)或现场可编程门阵列(FPGA)的配置,其执行至少一部分本文提出的技术,从而部件的互操作完成本文提出的技术的变型的性能。

示例性系统506包括流生成器508,其在从客户端514接收到指定涉及源304的属性306的条件310的查询308时,发起查询308的流106。示例性系统506还包括流订户510,其在从客户端514接收到使观察者312订阅流106的请求时,将观察者312订阅为流106的订户318。示例性系统506还包括流通知器512,其在检测到查询308的条件310完成时,识别流106的至少一个订户318;识别托管流106的一个或多个订户318的至少一个客户端514;以及对于各个客户端514,发送表明完成查询308的条件310的流项目108,用于输送到由客户端514托管的订户318。以这种方式,根据本文提出的技术,图5的示例性服务器502的示例性系统506的部件的架构和互操作向观察者312和客户端514通知完成查询308的条件310。

另一实施例涉及计算机可读介质,其包括配置为应用本文提出的技术的处理器可执行指令。这种计算机可读介质可以包括通信介质,例如,可以通过各种物理现象(例如,电磁信号、声波信号或光信号),并且在各种有线场景(例如,经由以太网或光纤电缆)和/或无线场景(例如,诸如WiFi的无线局域网(WLAN)、诸如蓝牙的个域网(PAN)、或蜂窝或无线电网络)中传播的信号,并且其编码一组计算机可读指令,当被设备的处理器执行时,所述指令使得设备实现本文提出的技术。这种计算机可读介质还可以包括计算机可读存储设备,其涉及有形设备,例如存储器半导体(例如,利用静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)和/或同步动态随机存取存储器(SDRAM)技术的半导体)、硬盘驱动盘、闪存设备、或者磁盘或光盘(例如,CD-R、DVD-R或软盘),其编码一组计算机可读指令,当被设备的处理器执行时,所述指令使得设备实现本文提出的技术。如本文定义的,识别为计算机可读存储设备的计算机可读介质的类别排除识别为通信介质的计算机可读介质的类别。

图6示出了以这些方式设计的示例性计算机可读介质,其中实现方式500包括计算机可读存储器设备602(例如,CD-R、DVD-R或硬盘驱动盘),在其上编码有计算机可读数据504。该计算机可读数据604接着包括一组计算机指令606,期配置为根据本文阐述的原理进行操作。在第一个这种实施例中,处理器可执行指令606可以配置为使得设备执行向观察者312通知完成查询308的方法,例如,图4的示例性方法400。在第二个这种实施例中,处理器可执行指令606可以配置为实现系统的一个或多个部件用于向观察者312和客户端514通知完成查询308的条件310,例如,图5的示例性设备402中的示例性系统506。许多这种计算机可读介质可以由本领域普通技术人员设想出,其配置为根据本文提出的技术操作。

E.变型

可以借助许多方面的变型设计本文讨论的技术,并且一些变型可以相对这些和其它技术的其它变型呈现额外的优点和/或减少缺点。此外,一些变型可以组合地实现,并且一些组合可以通过协同合作以额外的优点和/或减少的缺点为特征。变型可以并入到各种实施例中(例如,图4的示例性方法400;图5的示例性系统506;以及图6的示例性计算机可读存储器设备602)以给予这些实施例的单个和/或协同优点。

E1.场景

在这些技术的实施例中变化的第一方面涉及可以利用这种技术的场景。

作为该第一方面的第一变型,本文提出的技术可以用于多种设备中,例如,膝上型计算机、平板计算机、电话和其它通信设备、头戴式耳机、耳机、眼镜、手表、便携式游戏设备、便携式媒体播放器(例如,电视机和音乐播放器)、移动导航设备、移动设备和车辆。

作为该第一方面的第二变型,本文提出的技术可以用于提供涉及多种源304和属性306的流106,例如数据库服务器存储的数据;网络服务器存储的网络内容;文件系统存储的文件;媒体服务器存储的媒体,例如,音频、静止图像或移动图像、或多维度呈现;以及面向对象系统中各个对象102的字段104或成员。

作为该第一方面的第三变型,本文提出的技术可以用于实现多种类型的查询308及其条件310。这种查询308和/或条件310可以以多种查询语言呈现,例如,自然语言查询;结构化查询语言(SQL)的变型,XML路径语言(XPath);语言集成查询;和/或在指令式、声明式和/或功能编程语言中指定的指令。

作为该第一方面的第四变型,本文提出的技术可以用于代表多个观察者308(包括人、设备、应用和/或过程)接受并完成这种查询308。作为第一个这种例子,一个或多个观察者312还可以包括源304和/或流106;例如,第一观察者312还可以提交生成第一流106并作为响应修改第一观察者312的属性306的第一查询308,以及第二观察者312可以提交条件310涉及第一观察者312的属性306的第二查询308,因此提示发起第二流106向第二观察者312通知响应于第一流106对第一观察者312的属性306的更新。作为第二个这种例子,这种观察者312和源304的图可以生成为基于流的反应性编程模型,提供该模型来处理对源304的初始集合的更新的流106。作为第三个这种例子,观察者308可以指定订阅114,由此直接通知观察者308流项目316公布到流106;可以当通知观察者308流项目316公布到流106时指定基于流的编程平台的另一对象;和/或可以提供针对各个流项目316接受和调用的代理,例如,应用于每个这种流项目3167的表达树。作为第四个这种例子,观察者308还可以作为源304参与流106;例如,反应性的基于流的编程平台的对象可以将流项目放置到流106中,并观察(通过自己和/或其它源304)放置到流中的流项目。可以设计出许多这种场景适于应用本文提出的技术。

E2.创建源和流

在本文提出的技术的实施例中可能变化的第二方面涉及创建源304和/或基于其的流106。

作为该第二方面的第一变型,实现本文提出的技术的流平台302可以存储一组源304,并可以允许创建流106的请求指定各自的源304。此外,这种流平台302可以接受并完成创建新源304的请求,针对其可以创建流106。例如,提供流服务的服务器502可以包括存储至少一个源304的源集合,并可以通过创建包括与数据项相关联的属性306的新源304,并在源集合中存储新源304,来完成根据数据项创建源304的请求。新源304的这种数据项例如可以包括存储于网络服务器上的资源或数据;新数据库的记录;或者对象102的字段。然后,服务器502接受应用于新源304的查询308;生成与新源304相关联的流106;接受指定用于新源304的流106的订阅请求112;并向订户318通知流项目316涉及新源304的属性306。服务器502因此可以支持非反应性数据存储以参与反应性编程模型,并通过接受从数据存储推送的更新和/或通过针对更新轮询数据存储(例如,通过监视数据项以检测数据项更新,并在检测到数据项的数据项更新时,将数据项更新登记为新源304的属性306的更新)来这样做。

图7呈现了以该第二方面的第二变型为特征的示例性场景700的图示,其中实现本文提出的技术的流平台302根据查询308生成流106,所述查询308指定涉及存储于两个网站702上的数据项704的比较的条件310。在该示例性场景700中,即使网站702本来不配置为参与反应性编程模型,流平台302可以适于允许观察者304与存储于反应性编程模型中的数据项704交互。例如,流平台302可以首先创建具有包括条件310的结果(例如,指定数据项704的和)的属性306的源304;然后基于源304的属性306创建流106。例如,通过轮询706每个网站702以检测对存储的数据项704的数据项更新,流平台302还可以便于在反应性模型中包括网站702。除了支持扩展反应性编程模型以包括本身未配置用于这种介入的数据项704的源,该技术还使得能够完成查询308并提供涉及多个源304和属性306的联合的流106。这种联合可以通过本文提供的反应性基于流的编程平台比起它类型的流平台更容易地实现,例如,在图1的示例性场景100中的数据绑定平台110和图2的示例性场景200中的事件流协调器。例如,由于流平台302实现的健壮性和灵活性,由流平台302提供的灵活性可以支持通过发现能够执行查询的各个任务的多种设备和服务来完成查询,并可以创建支持所选设备和服务的互操作来完成查询的流。此外,可以以支持与用户到服务和用户到设备等价方式的服务到服务、服务到设备和设备到设备通信的方式提供联合,从而暴露每个元素的功能并可用于反应性基于流的编程平台的任意其它元素。

该第二方面的第三变型涉及查询模板,指定涉及一个或多个查询参数的查询逻辑。例如,查询模板可以包括选择四个不同源304的四个属性306中的最大值,并且可以指定特定源304作为查询模板的参数。因此可以由观察者312通过指定查询模板和实体(例如,属性306、源304和/或查询逻辑)来提交查询308,以应用到查询模板,而无需指定查询模板的被指定而非参数化的部分。流平台302可以通过根据查询模板生成查询308并绑定用于在请求中指定的每个查询参数的实体来完成查询。作为第一个这种例子,查询模板的所选的查询参数可以包括属性306和/或源304,并且查询308的提交可以指定特定的属性306和/或源304以绑定到所选的查询参数。作为第二个这种例子,模板查询的所选查询参数可以包括查询的查询逻辑,并且提交查询308的请求可以将查询逻辑指定为将绑定到所选查询参数的实体。查询逻辑例如可以被指定为以查询语言编写的查询的一部分,所述查询语言例如是结构化查询语言(SQL),表达树,代码块或提供有通过流平台302的接口生成请求方法的查询的调用的拉姆达表达式,或者实现用于查询逻辑的方法的委托的标识符(例如,对将接口实现为查询逻辑提供者的类别的实例的参考)。作为第三个这种例子,反应性基于流的编程平台的各种元素可以共享一组属性,例如,可以指定为配置用于参与流106的每个这种元素的功能的参数。例如,流平台302可以支持用于各个流106、源304、观察者312和可能影响每个这种元素的功能的订阅114的参数的规范。例如,可以根据目标类型(例如,在流106中公布的对象102的类型)模板化各个元素,并且任意元素可以具有指向指定为参数的特定类型对象102的功能,从而在流中涉及的所有元素可以互操作地配置为对应地响应于感兴趣的对象类型。

图8呈现了以创建参数化流802为特征的示例性场景800的图示。在该示例性场景800中,观察者312试图访问数据源,例如搜索引擎806,其响应于搜索请求提供数据并以排列方法808为特征,该排列方法808表明在特定时间特定网页810的搜索排列。观察者312可以试图利用搜索引擎806的排列方法808来检测特定网页810何时展现流行趋势,例如,网页810的排列何时在第一时间比第二时间具有多于两倍的幅度。流平台302可以通过提供参数化流802来支持这种请求,其使得观察者704能够在任意指定搜索引擎806检测用于特定网页810的指定条件时请求通知。观察者312因此可以向流平台302发送流请求804,以在特定网页810在特定搜索引擎806处趋向时生成包括表示检测到的实例的流项目316的流106。观察者312可以简单地通过指定参数化流802和参数(即,搜索引擎806和待监视的网页810),来连同流平台302发起该请求。流平台302因此可以为观察者312生成流106,并可以参与实现流106(例如,通过轮询和/或接收来自搜索引擎806的推送通知,并生成用于经由流106输送到观察者312的流项目316)。以这种方式,由流平台302提供的参数化流802可以使得任意观察者704能够请求流106从任意搜索引擎806趋向网页信息,而无需指定趋势检测的细节。

作为该第二方面的第四变型,除了提示将流项目316插入到流106的条件106外,查询308可以指定流106的流项目316的内容。例如,除了指定条件310(例如,比较属性306的值与阈值)外,查询308可以指定:用于检测到的条件310的完成的流项目316指定属性306的实际值。因此,当流106指定流项目316的流项目内容在检测到完成查询308的条件310时被输送到流106的订户318时,流平台302可以通过流项目316传输描述完成条件310的流项目内容。许多这种变型可以包含于本文提出的技术的实施例中。

E3.访问源并提供流

在这些技术的实施例中可能变化的第三方面涉及访问源304并向订户318提供流106的方式。

作为该第三方面的第一变型,可以通过标识符(例如,统一资源标识符(URI))识别流平台302的各个项,例如观察者312、源304、流106、订阅114、查询308和/或查询模板,以便各个项彼此参考。作为第一个例子,当指定涉及源304的查询308时,观察者312可以根据源304的统一资源标识符指定源304。流平台302可以为源304生成流106(可选地,将源304添加到一组可用资源304上),并可以返回识别新创建的流106的统一资源标识符。作为第二个例子,当接收到订阅请求112时,流平台302可以存储与标识符相关联的订阅114,并可以将标识符返回到订户318,从而订户318稍后可以根据其标识符参考订阅114,例如在从相同源304取消订阅的后续请求期间。

作为该第三方面的第二变型,可以经由代理访问流平台302的一个或多个方面。作为第一个这种例子,当从客户端514接收与流平台302交互的请求时,流平台302可以向所选的客户端514发送包括至少一种方法的代理,当由客户端514调用时,所述代理代表客户端514向流平台302发送请求。例如,代理可以包括组件,该组件在客户端514上执行,其接收本地请求,将这种请求转换为流平台302的可用且可调用的函数,处理将请求传输到流平台302(例如,发起与流平台302的请求;排列数据类型;以及确保输送到流平台302),和/或接收作为响应的由流平台302提供的任意数据(例如,响应于请求,提供的统一资源标识符(URI),其稍后可以由代理在与第一请求相关的后续请求中使用)。在一些实施例中,代理可以异步地处理这种请求,例如通过提供向流平台302发送请求的异步请求方法,和从流平台302接收对请求的响应的异步响应方法。

作为第一个这种例子,代理可以帮助创建源304。源创建代理可以提供这样的方法:当由所选的客户端514调用时,向流平台302发送请求以根据源定义创建源304。所选的客户端514可以请求创建表示所选客户端514的源304(例如,在公布可以聚集到流106的信息的源304的目录中表示的请求),或者替代的数据源,例如网站。源创建代理可以在接收到请求时在流平台302中根据在请求的源定义中指定的源定义来创建源304。例如,源创建代理可以接收请求,并可以调用流平台302的导致创建源304的方法。

作为第二个这种例子,代理可以帮助客户端514发现源304。例如,源发现代理可以提供以下方法:当被客户端514调用时,向流平台302发送请求以描述至少一个源304(例如,提供可订阅源304的目录的一部分;识别满足特定标准的一个或多个源304,例如,提供关于天气预警的信息的源304;和/或提供关于所选源304的更多信息)。因此,在从源发现代理接收这种请求时,流平台302可以将至少一个源304的描述发送到源发现代理用于输送到客户端514。

作为第三个这种例子,代理可以帮助客户端514与各个源304交互,例如请求生成在流106中公布的特定类型的数据。例如,源交互代理可以提供这样的方法:当由客户端514调用时,向流平台302发送请求以发起与特定源304的交互。因此,当从源交互代理接收请求时,流平台302可以与指定源304交互,以代表客户端514完成请求。

图9呈现了以帮助观察者312参与流平台302的代理904为特征的示例性场景900的图示。在该示例性场景900中,流平台302可以提供流平台902已知的且通过流平台902能够访问的对象的目录902,例如,多种源304、流106、观察者312和订阅114。此外,根据标识符904(例如,统一资源标识符(URI))在目录902和流平台302中识别各个对象。当观察者312请求访问目录902时,流平台312的目录发送器可以向观察者312发送针对观察者312所选择的目录902的部分。另外,如果观察者312请求订阅114特定流106,则流平台302可以向观察者312提供流代理906,使得观察者312能够与流106通过调用各种代理方法908进行交互,例如支持发起、暂停、移除或调整观察者312的订阅114至流106的流订阅代理方法908;支持复制流106和/或订阅114的流订阅复制代理方法908;支持观察者312调整订阅114的条件的流条件代理方法908,例如观察者312感兴趣的流项目的频率或标准;和/或描述观察者312的流106的各种方面的流元数据代理方法908。观察者312可以调用代理906的代理方法908以与第一流106通过流平台302进行交互,并且流代理906可以将代理请求910发送到流平台302,以便实现这种交互。流平台302可以提供其他流代理906用于与其它流106交互,以及观察者312可以存储和调用各自的流代理906,以便与流平台302的多种流106交互。

图10呈现以使用本文提出的技术来使得实体1002能够利用反应性基于流的平台实现完成查询1004为特征的示例性场景1000的图示。在该示例性场景1000中,实体1002接收查询1004,例如当检测到在用户1014附近预报下雨时请求通知用户1014。实体1002可以确定查询1004包括三个任务:检测用户1014的位置;确定针对用户1014的位置的下雨预报;以及当识别出这种下雨预报时通知用户1014(例如,当在用户位置一英里内下雨的可能性超过75%的概率时)。

为了实现完成该查询1004,实体1002首先可以查阅在反应性基于流的编程平台中可访问的对象的目录902。在目录902中,实体1002可以发现第一设备1006能够检测用户1014的位置(例如,定位腕表);服务1008能够接收用户1014的位置并识别该位置的下雨预报;以及第二设备1010能够向用户1014呈现通知1012(例如,用户1014所戴的耳机设备)。

实体1002可以联合反应性基于流的编程平台的这些对象的计算资源,以通过请求生成流106而实现完成查询1004,其中第一设备1006具有作为源304的第一订阅114;服务1008具有作为观察者312和源304的第二订阅114;以及第二设备1010具有作为观察者312的第三订阅114。生成这种流106因此是联合的例子,其中实体1002将查询1004的各个任务委托到反应性基于流的编程平台的各个对象,并还可以涉及参数化的例子,例如,其中服务1008的第二订阅114表明服务1008通过提供下雨预报并可选地,只有当下雨预报超过下雨阈值概率时(例如,75%的概率)而特别地响应于用户1014的位置。

因此,当第一设备1006检测到用户1014的位置时,第一设备1006将位置公布到流106作为第一流项目316,例如,用户位置的地理坐标。服务1008作为观察者312接收第一流项目316指定用户位置的通知,确定所述位置的下雨预报,并且如果可能下雨则向流106公布表明下雨预报的第二流项目316。第二流项目316由第二设备1010接收,并因此呈现为给用户1014的通知1012。以这种方式,反应性基于流的编程平台的对象被委托各个任务,并通过流106互操作地协作以联合方式实现查询1004。可以设计出在流平台302的架构中的许多这种变型,以便实现本文提出的技术。

F.计算环境

可以通过许多方面的变型来设计本文讨论的技术,并且一些变型可以相对这些和其它技术的其它变型呈现额外的优点和/或减少的缺点。此外,一些变型可以组合地实现,并且一些组合可以以通过协同合作的额外的优点和/或减少的缺点为特征。变型可以合并到各种实施例中以给予这种实施例上的单个和/或协同优点。

图11和后续讨论提供了适当计算环境的简短的一般描述,以实现本文阐述的一个或多个规定的实施例。图11的操作环境只是适当操作环境的一个例子,并且不意图暗示对操作环境的使用和功能的范围的任意限制。示例性计算设备包括但不限于,个人计算机、服务器计算机、手持或膝上型设备、移动设备(例如,移动电话、个人数字助理(PDA)、媒体播放器等)、多处理器系统、消费者电子设备、迷你计算机、大型计算机、包括任意上述系统或设备的分布式计算环境,等等。

虽然未要求,但是在“计算机可读指令”的一般上下文中描述的实施例由一个或多个计算设备执行。计算机可读指令可以经由计算机可读介质(下文讨论)分布。计算机可读指令可以实现为程序模块,例如函数、对象、应用程序接口(API)、数据结构等,其执行特定任务或实现特定抽象数据类型。一般地,计算机可读指令的功能可以按期望组合或分布在各种环境中。

图11示出了包括配置为实现本文提供的一个或多个实施例的计算设备1102的系统1100的例子。在一个配置中,计算设备1102包括至少一个处理单元1106和存储器1108。取决于计算设备的准确配置和类型,存储器1108可以是易失性的(例如,RAM)、非易失性的(例如,ROM、闪存等)或两者的一些组合。该配置在图10中由虚线1104示出。

在其它实施例中,设备1102可以包括额外的特征和/或功能。例如,设备1102还可以包括额外的存储设备(例如,可移除和/或不可移除),包括但不限于,磁存储设备、光存储设备等。这种额外的存储设备在图10中由存储设备1110示出。在一个实施例中,实现本文提供的一个或多个实施例的计算机可读指令可以在存储设备1110中。存储设备1110还可以存储其它计算机可读指令以实现操作系统、应用程序等。计算机可读指令可以加载到存储器1108中例如用于由处理单元1106执行。

如本文使用的术语“计算机可读介质”包括计算机存储介质。计算机存储介质包括易失性和非易失性、可移除和不可移除介质,其实现在任意方法或技术中用于存储信息(例如,计算机可读指令或其它数据)。存储器1108和存储设备1110是计算机存储介质的例子。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字通用盘(DVD)或其它光存储设备、磁带盒、磁带、磁盘存储设备或其它磁存储设备、或可用于存储期望信息并由设备1102访问的任意其它介质。任意这种计算机存储介质可以是设备1102的一部分。

设备1102还可以包括通信连接1116,其允许设备1102与其它设备通信。通信连接1116可以包括但不限于,调制解调器、网络接口卡(NIC)、集成网络接口、射频发送器/接收器、红外端口、USB连接、或用于将计算设备1102连接到其它计算设备的其它接口。通信连接1116可以包括有线连接或无线连接。通信连接1116可以发送和/或接收通信介质。

术语“计算机可读介质”可以包括通信介质。通信介质通常实现计算机可读指令或在“已调制数据信号”(例如,载波或其它传输结构)中的其它数据,并包括任意信息输送介质。术语“已调制数据信号”可以包括其一个或多个特性以编码信号中的信息的方式被设置或改变的信号。

设备1102可以包括输入设备1114,例如键盘、鼠标、笔、语音输入设备、触摸输入设备、红外摄像机、视频输入设备和/或任意其它输入设备。设备1102还包括输出设备1112,例如,一个或多个显示器、扬声器、打印机和/或任意其它输出设备。输入设备1114和输出设备1112可以经由有线连接、无线连接或其任意组合连接到设备1102。在一个实施例中,来自另一计算设备的输入设备或输出设备可以用作计算设备1102的输入设备1114或输出设备1112。

计算设备1102的部件可以通过各种互连(例如总线)进行连接。这种互连可以包括外围部件互连(PCI)(例如,快速PCI)、通用串行总线(USB)、Firewire(IEEE 1394)、光总线结构等。在另一实施例中,计算设备1102的部件可以通过网络互连。例如,存储器1108可以包括位于通过网络互连的不同物理位置的多个物理存储器单元。

本领域技术人员可以认识到用于存储计算机可读指令的存储设备可以跨网络分布。例如,经由网络1118访问的计算设备1020可以存储计算机可读指令,以实现本文提供的一个或多个实施例。计算设备1102可以访问计算设备1020,并下载一部分或全部计算机可以读指令用于执行。替代地,计算设备1102可以按照需要下载计算机可读指令,或者一些指令可以在计算设备1102处执行而一些在计算设备1120处执行。

G.术语的使用

虽然以专用于结构特征和/或方法动作的语言描述了主题,但可以理解的是,在随附权利要求中定义的主题不必限于上述具体特征或动作。而是,上述具体特征和动作被公开为实现权利要求的示例性形式。

如在本申请中使用的,术语“部件”、“模块”、“系统”、“接口”等一般意图指的是计算机相关实体,是硬件、硬件和软件的组合、软件或执行中的软件。例如,部件可以是但不限于,运行在处理器上的过程、处理器、对象、可执行文件、执行线程、程序和/或计算机。通过示例,运行在控制器上的应用和控制器都可以是部件。一个或多个部件可以驻留在过程和/或执行的线程中,并且部件可以位于一个计算机上和/或分布在两个或更多个计算机之间。

此外,所要求保护的主题可以实现为方法、装置或制品,其使用标准的编程和/或工程技术来产生软件、固件、硬件或其任意组合,来控制计算机实现所公开的主题。本文使用的术语“制品”意图涵盖从任意计算机可读设备、载体或介质可访问的计算机程序。自然,本领域技术人员将认识到可以对该配置做出许多修改,而不背离所要求保护主题的范围或精神。

本文提供了实施例的各种操作。在一个实施例中,所描述的一个或多个操作可以构成存储于一个或多个计算机可读介质上的计算机可读指令,当被计算设备执行时,其将使得计算设备执行所描述的操作。所描述的一些或所有操作的次序不应解释为暗示这些操作必须依赖于该次序。受益于本说明书的本领域技术人员可以理解替代的次序。此外,可以理解的是,在本文提供的每个实施例中不必呈现所有的操作。

此外,本文使用的词语“示例性”表示用作例子、实例或图示。本文描述的任意方面或设计作为“示例性的”不必解释为比其他方面或设计更优。而是,使用词语“示例性的”意图以具体方式表示概念。在本申请中使用的,术语“或者”意图表示包含的“或者”而不是排他的“或者”。也就是说,除非另外指出或者根据上下文明知,否则“X采用A或者B”意图表示任意自然包含排列。也就是说,如果X采用A;X采用B;或者X采用A和B,则在任意上述实例中满足“X采用A或者B”。另外,如在该申请和随附权利要求中使用的冠词“一(a)”和“一(an)”一般可以解释为表示“一个或多个”,除非另外指出或者根据上下文明知指向为单数形式。

另外,虽然已经结合一个或多个实现方式示出和描述了本公开,但是本领域技术人员在阅读和理解本说明书和附图时可以想到等价的改变和修改。本公开包括所有这些改版和修改,并且仅受到后续权利要求的范围的限制。具体关于上述部件(例如,元素、资源等)执行的各种功能,用于描述这种部件的术语意图对应于(除非另外指出)执行所描述部件的指定功能的(例如,功能上等价)的任意部件,即使结构上不等价所公开的执行本公开的图示示例性实现方式的本文中功能的结构。另外,虽然已经仅结合若干实现方式之一公开了本公开的特定特征,但是按照期望并有利于任意给定的或特定应用,这种特征可以与其它实现方式的一个或多个其它特征组合。此外,到术语“包括”、“具有”、“有”、“利用”或其变型用于详细描述或权利要求的程度,这种术语意图以类似于术语“包括”的方式是包含性的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1