基于云的可复合数据层的制作方法

文档序号:24892505发布日期:2021-04-30 13:20阅读:63来源:国知局
基于云的可复合数据层的制作方法



背景技术:

对于网络应用,不执行新浏览器页面的单页面应用设计特征在用户与其交互时加载。一旦用户在spa内,该设计范例就会提供响应性非常好的体验,并且最终用户感知的延迟(eupl)较低。然而,启动spa或者从一个spa改变到另一spa所涉及的前期成本很高,包括用于下载大量架构和其他代码资源、从用于生成初始视图的服务中取回数据、以及执行代码资源,包括处理源自服务的数据并且呈现对应的视图。这导致在启动spa时有些明显延迟,其大大增加了eupl。常规的解决方案涉及向spa添加越来越多的(以及越来越分散的)功能,从而导致大型的整体应用,从而导致在软件开发和管理中不必要的依赖性,并且增加了针对大型应用的大小和存储器消耗。



技术实现要素:

根据本公开的第一方面,一种用于与一个或多个远程客户端设备进行交互的系统,所述系统包括:一个或多个处理器;以及存储指令的一个或多个机器可读介质,所述指令当由所述一个或多个处理器执行时,使所述一个或多个处理器用于:与第一客户端设备建立第一网络连接;并且针对第一应用标识第一多个数据插件组件,每个数据插件组件被配置为提供对一个或多个计算机实现的服务的访问,其中,所述第一多个数据插件组件包括第一数据插件组件和不同的第二数据插件组件。所述指令还使所述一个或多个处理器用于:经由所述第一网络连接从所述第一客户端设备接收第一复合请求,所述第一复合请求标识第一多个动作,包括与所述第一数据插件组件相关联的第一动作和与所述第二数据插件组件相关联的第二动作。另外,所述指令还使所述一个或多个处理器用于:响应于确定所述第一复合请求标识了第一动作,通过执行所述第一数据插件组件的一部分来执行所述第一动作,以利用第一计算机实现的服务执行第一事务(transaction),并且基于所述第一事务来获得第一响应数据;并且在第一传输中并且响应于所述第一复合请求,经由所述第一网络连接将所述第一响应数据传输到所述第一客户端设备。所述指令还使所述一个或多个处理器用于:响应于确定所述第一复合请求标识了第二动作,通过执行所述第二数据插件组件的一部分来执行所述第二动作,以利用第二计算机实现的服务执行第二事务,并且基于所述第二事务来获得第二响应数据,其中,所述第二计算机实现的服务不同于所述第一计算机实现的服务;以及在与所述第一传输分开的第二传输中并且响应于所述第一复合请求,经由所述第一网络连接将所述第二响应数据传输到所述第一客户端设备。

根据本公开的第二方面,一种用于与一个或多个远程客户端设备进行交互的方法,所述方法包括:与第一客户端设备建立第一网络连接;并且针对第一应用标识第一多个数据插件组件,每个数据插件组件被配置为提供对一个或多个计算机实现的服务的访问,其中,所述第一多个数据插件组件包括第一数据插件组件和不同的第二数据插件组件。所述方法还包括:经由所述第一网络连接从所述第一客户端设备接收第一复合请求,所述第一复合请求标识第一多个动作,包括与所述第一数据插件组件相关联的第一动作和与所述第二数据插件组件相关联的第二动作。另外,所述方法包括:响应于确定所述第一复合请求标识了第一动作,通过执行所述第一数据插件组件的一部分来执行第一动作,以利用第一计算机实现的服务执行第一事务,并且基于所述第一事务来获得第一响应数据;以及在第一传输中并且响应于所述第一复合请求,经由所述第一网络连接将所述第一响应数据传输到所述第一客户端设备。所述方法还包括:响应于确定所述第一复合请求标识了第二动作,通过执行所述第二数据插件组件的一部分来执行第二动作,以利用第二计算机实现的服务执行第二事务,并且基于所述第二事务来获得第二响应数据,其中,所述第二计算机实现的服务不同于所述第一计算机实现的服务;以及在与所述第一传输分开的第二传输中并且响应于所述第一复合请求,经由所述第一网络连接将所述第二响应数据传输到所述第一客户端设备。

提供本发明内容以简化的形式介绍一些概念,这些概念将在下文的详细描述中进一步描述。本发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也并不旨在用于限制所要求保护的主题的范围。此外,所要求保护的主题并不限于解决在本公开的任何部分中所指出的任何或所有缺点的实现方式。

附图说明

附图仅通过举例而非限制的方式描绘了根据本教导的一种或多种实现方式。在附图中,相似的附图标记指代相同或相似的元件。此外,应当理解,附图不必按比例绘制。

图1图示了示例性系统,其中,各种客户端设备利用数据服务来与各种计算机实现的服务进行交互。

图2图示了在客户端设备与由在图1中所示的数据服务所提供的各个数据服务实例之间的交互的示例。

图3图示了其中在图2中所示的数据服务实例处理从第一spa实例接收到的复合请求的示例。

图4图示了类似于图3的示例,但是其中,响应于从第一spa实例接收到新的复合请求消息而取消了未决活动,同时存在当前未决的复合请求。

图5图示了其中第一spa实例和数据服务实例执行与针对不同spa的预取代码和数据有关的活动的示例。

图6图示了其中客户端设备已经从如在图2-5中所示地执行第一spa实例转换为执行不同的第二spa实例,同时继续维持初始针对第一spa实例所建立的相同网络连接的示例。

图7图示了在架构和数据服务实例之间以及其之内执行的用于卸载第一spa实例的操作的示例。

图8是图示了示例性软件架构的框图,所述软件架构的各个部分可以与在本文中所描述的各种硬件架构结合使用。

图9是图示了示例性机器的组件的框图,所述机器被配置为从机器可读介质读取指令并且执行在本文中所描述的任何特征。

具体实施方式

在下文的详细描述中,通过示例的方式阐述了许多具体细节,以便提供对相关教导的透彻理解。然而,应当明了的是,可以在没有这样的细节的情况下实践本教导。在其他情况下,为了避免不必要地混淆本教导的各方面,已经在相对较高的水平上描述了公知的方法、过程、组件和/或电路,而没有细节。在以下材料中,方向的指示(诸如“顶部”或“左侧”)仅是为了在下文的讨论中提供参考系,而并非旨在指示所描述物品的要求的、期望的或预期的取向,除非明确指出。

图1图示了示例性系统100,其中,各种客户端设备110、120、130和190利用数据服务160来与各种计算机实现的服务170和180进行交互。在图1中,客户端设备110由第一用户102a使用。客户端设备110正在执行第一应用的第一应用实例112(其可以被简称为“应用”并且在图1中被缩写为“app”),并且第一用户102a正在通过经由显示设备114呈现给第一用户102a的视图116与第一应用实例112交互。显示设备114可以被称为“显示器”。在一些示例中,显示设备114被包含在客户端设备110中,并且在一些示例中,显示设备114被通信地耦合到客户端设备110。第一应用实例112使视图116被呈现以显示给第一用户102a。出于讨论的目的,在图1中未图示客户端设备110的其他方面;客户端设备110的这样的方面的示例在下文结合图8和图9进行描述。在一些示例中,第一用户102a与客户端设备110和/或第一应用实例112相关联。第一应用实例112被配置为建立并且已经建立了经由一个或多个数据通信网络138与数据服务160的第一网络连接(在图1中未示出)以利用各种计算机实现的服务,诸如一个或多个服务170和/或外部服务180。

在一些实现方式中,第一应用实例112是在由网络浏览器应用(在图1中未示出)提供的执行环境或类似执行环境之内执行的第一网络应用的实例。示例性网络浏览器应用包括但不限于:microsoft的edge浏览器、mozilla的firefox浏览器(移动或台式)、apple的safari浏览器(移动或台式)以及google的chrome浏览器(移动或台式)。举例来说,网络浏览器应用可以经由一个或多个网络138与网络服务器140a建立一个或多个网络连接,从网络服务器140a取回包括代码资源144a的网络应用资源142a(诸如但不限于:html、javascript、网络assembly和/或css资源),并且执行所取回的网络应用资源142a作为第一应用实例112。所述网络浏览器应用可以提供画布,可以结合经由显示设备114呈现的标签或窗口来提供画布,以渲染视图116。在一些示例中,第一应用实例112是被实现为单页面应用(spa)的网络应用。

第二用户102b正在使用客户端设备120和客户端设备130两者。客户端设备120正在执行第二应用实例122a和第三应用实例122b,其经由显示设备124呈现各自的视图126a和126b。客户端设备120、显示器124、第一和第二应用实例122a和122b以及视图126a和126b可以被配置为与针对客户端设备110、显示器114、第一应用实例112和视图116的描述大致相同。第二应用实例122a被配置为建立并且已经建立了与数据服务160的第二网络连接,并且第二应用实例122b被配置为建立并且已经建立了与数据服务160的不同于第一网络连接的第三网络连接。

在一些示例中,第二应用实例122a和/或第三应用实例是网络应用,如针对第一应用实例112所讨论的。在一些示例中,单个网络浏览器应用实例可以提供与第二应用实例122a相关联的第一标签和/或窗口,以及与第三应用实例122b相关联的不同于第一标签和/或窗口的第二标签和/或窗口。在一些示例中,第二应用实例122a和第三应用实例122b用于相同的网络应用;例如,第二用户102b可以针对相同的网络应用同时地使用多个标签和/或窗口,从而导致相应的应用实例以及与数据服务160的相应的网络连接。在其中第二和第三应用实例122a和122b在单个网络浏览器应用实例之内同时地执行的示例中,在本描述中第二和第三应用实例122a和122b被视为单独的应用实例。

在一些示例中,网络浏览器应用在第一域(在图1中被标记为“@domain1”)处连接到第一网络服务器140a,以取回代码资源144a来执行第二应用实例122a,并且网络浏览器应用在不同于所述第一域的第二域(在图1中被标记为“@domain2”)处连接以取回不同的代码资源144b来执行第三应用实例122b。例如,为网络浏览器提供针对第一域的域名,诸如“www.foo.net”,所述域名经由域名系统(dns)被解析为网络浏览器能够被连接到的网络地址以与第一网络服务器140a进行交互。网络浏览器应用将第一域和第二域视为不同的“起源”,从而导致对在第二应用实例122a与第三应用实例122b之间的交互的某些浏览器强制的限制。类似地,第一用户102a可以使网络浏览器标签或窗口从第一应用实例112过渡到从不同的域服务的不同网络应用。

客户端设备130正在执行本地应用的本地应用实例132,本地应用实例132被配置为经由一个或多个网络138进行连接以建立并且已经建立了与数据服务160的第四网络连接(在图1中未示出)。在一些示例中,客户端设备130可以利用显示设备来呈现本地应用实例132的视图,类似于客户端设备110的显示设备114和视图116。然而,在一些示例中,本地应用实例132未被配置为利用这样的显示设备。代替被配置为由网络浏览器应用下载以在由网络浏览器应用提供的执行环境之内执行,用于本地应用的可执行资源133被配置为被安装在客户端设备130中所包括的存储单元中,并且从中取回。针对本地应用的可执行资源133可以包括但不限于:机器语言、解释代码(例如,以python编程语言编写的代码)和/或字节码中的一个或多个预编译程序模块。在一些示例中,经由(一个或多个)网络138从本地应用提供商134获得本地应用作为本地应用包136。在一些示例中,本地应用提供商134被实现为“app商店”,诸如但不限于:microsoftstore,googleplay(用于android或chromeos平台)和appleappstore(用于ios平台)。在一些示例中,本地应用包136可以以软件安装程序包文件格式来提供,诸如但不限于:用于android的apk文件、用于ios的pkg文件、用于fedoralinux的rpm文件、以及用于windowsinstaller的msi文件。在一些示例中,客户端设备110、120、130和/或190能够执行网络应用和本地应用两者。

第三用户102n正在使用客户端设备190,其在图2以及后续图中描述。客户端设备110、120、130和/或190也可以被称为“客户端计算设备”,并且仅是示例性实施例。

在图1中所示的示例中,服务器集群150被配置为提供数据服务160,在服务器集群150中,多个计算机处理器在“云计算”环境中操作或者作为“软件即服务”(saas)来操作。在一些示例中,如在图1中所示的,服务器集群150被配置为提供由数据服务160和/或计算机实现的服务170(其可以被简称为“服务”)使用的高速缓存174,数据服务160利用所述高速缓存174来执行事务。例如,microsoftazure云计算服务或其他云计算服务是针对服务器群集150的合适平台。

数据服务160向诸如如在图1中所示的客户端设备110、120、130和190的远程客户端设备提供服务,用于根据针对客户端设备的一致接口来利用各种计算机实现的服务,诸如一个或多个服务170和/或外部服务180。在图1中所图示的示例中,数据服务160被配置为经由(一个或多个)网络138从远程客户端设备上的应用实例接收网络连接,并且针对与服务客户端事务的每个建立的网络连接来实例化个体的数据服务实例(诸如数据服务实例162a)。在图1中所示的示例中,在应用实例112与数据服务实例162a之间、在应用实例122a与数据服务实例162b之间、在应用实例122b与数据服务实例162c之间、在本地应用实例132与数据服务实例162d之间、以及在客户端设备190与数据服务实例162e之间,存在个体的网络连接。在一些示例中,数据服务实例162a、162b、162c、162d和162e在执行被包含在数据服务组件164中的虚拟机图像的各个虚拟机中操作,由此提供隔离和保护。可以使用例如基于管理程序的虚拟化和/或基于容器的虚拟化来实现这样的虚拟机。

在一些示例中,如在图1中所示的,可能存在不在服务器群集150之内实现的多于一个的外部计算机实现的服务180,数据服务160可以利用服务180来执行与服务170非常相似的事务,但是经由(一个或多个)网络138。在一些示例中,服务器群集150可以由第一方来管理,而外部服务180可以由不同的一方来管理。在一些示例中,如在图1中所示的,服务器计算机系统182可以被配置为经由(一个或多个)网络138利用数据服务160。

尽管图1仅图示了本地应用提供商134、数据服务160、高速缓存174、外部服务180和服务器182的单个实例,但是在一些示例中,可以存在这些元件中的一个或多个元件的多个实例。类似地,可以提供类似于网络服务器140a和140b的额外网络服务器。

图2图示了在客户端设备190与在图1中所示的由数据服务160所提供的相应数据服务实例162e之间的交互的示例。客户端设备190可以包括针对客户端设备110、120和130所描述的任何特征,并且针对客户端设备190所描述的任何特征可以被包含在客户端设备110、客户端设备120和/或客户端设备130中。注意,尽管图2-7中的示例是关于在网络浏览器应用之内执行的单页面应用所讨论的,但是所描述的技术也可以被应用于向在网络浏览器应用、本地应用(诸如在图1中的本地应用132)、其他具有网络功能的应用以及诸如在图1中的服务器182的服务器系统中执行的多页面网络应用提供对计算机实现的服务的访问。

在图2中,客户端设备190正在执行网络浏览器应用实例210,这与在图1中针对客户端设备110和120所描述的非常相似。第一单页面应用(spa)实例2l6a正在网络浏览器应用实例210之内执行,并且具有经由显示设备220呈现给用户102n的对应的第一视图222a。为了执行第一spa实例2l6a,网络浏览器应用实例210取回架构212和被配置为使用架构212实现第一spa实例216a的第一spa代码资源214a。架构214和第一spa代码资源2l4a每个均包括由网络浏览器应用实例210可执行的代码,诸如,例如html、脚本(例如,根据javascript语言)和/或二进制指令(例如,以webassembly模块的形式)。第一spa代码资源2l4a控制第一spa视图222a的渲染(例如,生成包括所选择的ui元素的用户界面(ui)),响应于包括用户输入事件的事件经由数据服务实例162e执行的动作,以及响应于新数据而重新渲染页面。架构212提供代码资源,其用于建立与数据服务160的网络连接,维持这样的网络连接,将动作请求(包括相关联的数据)序列化并且传输到数据服务160,从数据服务160接收和反序列化数据,以及将应用和连接状态通信给第一spa实例216a和数据服务160。在一些实现方式中,第一spa实例216a被配置为基于从数据服务实例162e取回的数据来生成初始视图,响应于检测到用户与第一spa视图222a的交互经由数据服务实例162e执行与一个或多个计算机实现的服务执行事务,以及响应于从数据服务实例162e接收到的数据来修改第一spa视图222a的部分。

在图2中,架构212已经经由数据服务160与数据服务实例162e建立了网络连接230。通过在架构212与数据中心组件232(其可以被称为“数据中心”)之间的交互,维持持久的网络连接。在该示例中,维持网络连接230,直到针对第一spa实例216a的标签或窗口经历页面重新加载,经历页面加载(例如,由于导航到新起点)或关闭。在一些示例中,该网络连接是使用asp.netsignalr连接来实现的。在一些示例中,尽管自动重新建立的基础传输连接中断,但是所述网络连接仍可以保持建立;例如,根据保持signalr连接id的逻辑。在一些示例中,使用websocket连接(例如,具有websocket传输的signalr)实现该网络连接,用于在第一spa实例216a与数据服务实例162e之间进行对数据和消息的低延迟双向通信。通过在架构212中实现网络连接管理特征,第一spa代码资源2l4a被简化并且获得与数据服务160的健壮的通信信道。在一些示例中,作为建立网络连接230的一部分,架构212和/或第一spa实例218a可以向数据服务160和/或数据服务实例162e与之进行交互的一个或多个计算机实现的服务进行认证。

响应于建立网络连接230,针对网络连接230实例化数据连接控制器组件234(其可以被称为“数据连接控制器”)。数据连接控制器234被配置为响应于经由连接230接收到的插件服务管理请求消息。“请求消息”也可以被称为“请求”。例如,作为针对第一spa实例216a的初始化阶段的一部分,第一spa实例216a可以发出“创建插件服务”请求消息,响应于此,数据连接控制器234实例化插件服务组件240a(其可以被称为“插件服务”)。在一些示例中,“创建插件服务”请求消息包括应用标识符,并且数据连接控制器234仅针对应用标识符来实例化单插件服务。在一些实现方式中,通用插件服务组件被用于每个插件服务实例,以及在数据插件组件和/或数据源组件中的特定于应用的逻辑。

在一些示例中,“创建插件服务”请求消息可以包括软件版本标识符,以指示用于取回和实例化的插件服务组件240a的特定版本。所述软件版本标识符允许控制针对各种部署(诸如针对开发、测试和/或生产)实例化的代码组件。在一些实现方式中,数据连接控制器234利用组件取回器236,组件取回器236被配置为选择性地取回用于动态实例化的组件,诸如与spa实例相关联的用于实例化的插件服务组件、插件组件和数据源组件。组件取回器236可以被配置为从被包含在数据服务实例162e中的本地存储装置(如果被部署到所述存储装置)、从由数据服务160维护的数据服务组件164(如果被部署在此)或者从其他地方取回这样的组件,并且可以被配置为基于所提供的软件版本标识符来选择组件的版本。

数据连接控制器234还被配置为将经由连接230接收到的插件服务请求消息(由插件服务执行的请求消息)和数据插件请求消息(指示将由插件执行的动作的请求消息,诸如在图2中所示的数据插件250a)路由到相关联的插件服务。在一些示例中,将由数据服务实例162e实例化的每个插件服务所独有的应用标识符或插件服务标识符与每个插件服务相关联,应用标识符或插件服务标识符被包含在插件服务请求消息和插件请求消息中,并且数据连接控制器234被配置为将接收到的请求消息路由到与包含在所接收到的请求消息中的应用标识符或插件服务标识符相关联的插件服务。

在一些实现方式中,插件服务240a被配置为响应于接收到标识所选择的插件(诸如导出插件244a或数据插件250a)的“创建插件”插件服务请求消息,而实例化与标识出的插件相对应的插件组件。在一些示例中,“创建插件”插件服务请求消息包括要被实例化的插件应用的一个或多个配置参数,作为插件的初始化阶段或者针对由插件执行的一个或多个动作的一部分。在一些示例中,第一spa实例216a被配置为作为针对第一spa实例216a的初始化阶段的一部分,发出一个或多个“创建插件”请求消息以实例化插件来与所选择的服务执行事务。在一些示例中,可以在“创建插件服务”请求消息中标识一个或多个数据插件组件,并且包括相应的配置参数,并且以类似的方式来实例化。因此,第一spa实例216a能够利用数据服务实例162e作为“可复合”数据层,其中,实例化的插件的所选择的复合被第一spa实例216a使用。插件服务240a还被配置为提供一组代码组件,其向为插件服务实例化的插件通知接收到新数据插件请求消息。插件服务240a还被配置为提供一组代码组件,其作为处理数据插件请求消息的结果来接收和传输由数据插件所生成的数据。这两组组件被示意性地图示为第一请求总线242a。

在一些实现方式中,如在图2中所示的,针对每个插件服务来实例化导出插件组件(其可以被称为“导出插件”或“聚合插件”),诸如与第一插件服务240a相关联的第一导出插件244a。导出插件244a被配置为将由一些或所有数据插件生成的数据提供给插件服务240a,以经由网络连接230传输到第一spa实例216a。在一些示例中,导出插件244a被配置为仅针对所选择的数据插件将这样的数据提供给插件服务240a,并且基于标识或列入白名单和/或列入黑名单的数据插件来选择数据插件。例如,列入白名单和/或列入黑名单的数据插件可以作为配置参数被包含在针对导出插件244a的“创建插件”插件服务请求消息中,或者导出插件244a可以实现一个或多个动作以动态地将指定的数据插件列入白名单和/或列入黑名单。在一些实现方式中,针对导出插件244a所描述的一些或全部特征可以替代地由插件服务240a来实现。

数据插件组件可以被配置为执行以下中的一项或多项:

·响应于标识动作的数据插件请求消息,经由数据源组件(诸如数据源252a,其被配置为与服务260a交互)通过执行与计算机实现的服务(诸如图2中的服务260a)执行事务来执行动作(例如,通过执行数据插件组件的一部分)。

·利用一个或多个数据源组件,每个数据源组件都被配置为与一个或多个计算机实现的服务进行交互。在一些示例中,所述数据插件使所述数据源组件针对数据插件被实例化;例如,作为针对所述数据插件的初始化阶段的一部分。

·由于响应于标识动作的数据插件请求消息而执行动作,因此输出一个或多个数据部分。在一些示例中,输出数据部分仅指示已经执行的动作。这样的数据部分可以响应于数据插件请求消息而被传输到客户端设备。

·指示在未决的数据插件请求消息中数据插件组件何时完成了与数据插件组件相关联的所有动作。

·响应于另一数据插件输出数据部分而执行动作。在一些示例中,可以基于数据部分的内容来执行动作。

·作为响应于另一数据插件输出数据部分而执行动作的结果,输出一个或多个数据部分。可以将输出数据部分传输到客户端设备,而不是响应于未决数据插件请求消息。

·不利用任何数据源组件,并且因此不利用计算机实现的服务执行事务。

·响应于由针对服务的数据源指示的服务发起的事件并且不对应于未决的数据插件请求消息,输出一个或多个数据部分。例如,尽管没有与电子邮件服务的未决事务,但是电子邮件服务异步地报告刚接收到新电子邮件。

·响应于由数据源指示的高速缓存发起的事件,输出一个或多个数据部分。例如,数据源可以被高速缓存键值订阅,并且接收已经针对高速缓存键值存储新值的异步报告。

·响应于由数据插件检测到的一些其他事件,输出一个或多个数据部分。可以将输出数据部分传输到客户端设备,而不是响应于未决数据插件请求消息。例如,数据插件响应于计时器到期而输出数据部分。

数据源组件被配置为与数据插件组件接口,并且使得数据插件组件能够与计算机实现的服务(诸如服务260a)进行交互。所述数据源组件被配置为根据针对服务的数据格式化和协议要求与服务进行交互。在一些示例中,所述数据源组件被配置为向服务进行认证。在一些实现方式中,存在用于在数据插件组件与数据源组件之间的交互的已定义的接口,以促进跨不同数据插件组件重用数据源组件,和/或利用不同数据源组件替换数据源组件。

在一些示例中,数据源组件被配置为利用高速缓存274的一部分。例如,所述数据源组件可以被配置为使用高速缓存174来通过确定高速缓存174是否具有与键值相关联存储的未过期的可高速缓存数据来加速数据请求操作(例如,来自数据插件的数据请求和/或从服务请求数据)。如果存在,则数据源组件将取回所存储的可高速缓存数据。如果否,则所述数据源组件与服务执行事务(例如,从服务请求数据),基于事务获得可高速缓存数据(其可能包括基于从服务接收到的数据生成的数据作为对事务的响应),并且将所获得的可高速缓存数据与键值相关联地存储在高速缓存174中。结果,以后能够以显著降低的延时来执行数据请求操作。

在图2中所示的示例中,已经针对第一spa实例216a实例化了第一数据插件组件250a。第一数据插件250a被配置为利用第一数据源组件252a,并且在一些示例中示例化第一数据源组件252a,用于与相关联的第一计算机实现的服务260a来执行事务。与服务260a的关联在图2中由“s1”符号来图示。另外,第一数据源252a被配置为利用高速缓存174的第一部分270a。在一些实现方式中,部分270a是高速缓存的分区的一部分,诸如与用户102n相关联的分区。在一些示例中,部分270a对应于由第一数据源252a用于利用高速缓存174存储和/或取回可高速缓存数据的一个或多个键值。与高速缓存部分270a的关联在图2中由“c1”符号来图示。还存在第二数据插件250b,其与插件服务240a、数据源252b、服务260b(由“s2”符号示出)和高速缓存174的第二部分(由“c2”符号示出)具有相似的关联。在图2中所示的服务260a、260b、260c和260d中的每个均可以是图1中的服务170或外部服务180中的相应的一个。

在一些实现方式中,如在附图中所示的,数据服务实例162e被配置为接收和处理复合数据插件请求消息(其可以被称为“复合请求”),诸如在图2和图3中所示的复合请求280。复合请求标识将由总共一个或多个相关联的数据插件执行的多个动作,其中,针对每个相关联数据插件来标识一个或多个动作。在一些示例中,复合请求标识将由总共两个或更多个数据插件执行的动作。在一些示例中,复合请求基于作为执行第一动作的结果而获得的数据,标识由数据服务实例162e自动执行的第一动作和第二从属动作,从而产生“链接”请求。在一些实现方式中,复合请求包括键/值字典,所述键/值字典包括标识每个动作的键和/或值。在一些示例中,所述键/值字典包括针对要由其相关联的数据插件执行动作所使用的动作的数据(其可以被称为“动作数据”或“动作参数”)。

图3图示了其中在图2中所示的数据服务实例162e处理从第一spa实例216a接收到的复合请求280的示例。在操作300处,第一spa实例216a生成复合请求280,并且经由网络连接230将复合请求280传输到数据服务实例162e。结果,在操作302处,数据连接控制器234将复合请求280路由到插件服务240a。响应于接收到复合请求280,插件服务240a开始新的复合响应生命周期,其中,未决请求282针对用于管理复合响应生命周期的复合请求280。在一些实现方式中,数据插件250a和250b订阅插件服务240a以接收新的未决请求的通知。

在该示例中,复合请求280标识与第一数据插件250a相关联的第一动作以及与第二数据插件250b相关联的第二动作。在操作304处,第一数据插件250a将未决请求282的第一动作检测为与第一数据插件250a相关联。响应于在未决请求282中对第一动作的这种检测,第一数据插件250a执行第一动作,导致第一数据插件250a向与数据插件250a相关联的数据源252a发出数据源请求306,指示将由数据源252a执行的事务。在操作308处,响应于接收到数据源请求306,数据源252a向服务260a发出对应的服务请求310,以利用服务260a执行与数据源252a相关联的第一事务。在操作312处,服务260a接收第一事务,这将最终导致指示第一事务已经完成的服务响应324。在操作314、318和322处,相对于未决请求282的第二动作来执行类似的一系列操作,这最终将导致来自服务260b的服务响应344,指示针对服务请求320已经完成的第二事务。

在操作326处,数据源252a接收服务响应324(或者以其他方式确定与服务260a的第一事务已经完成),并且向数据插件250a指示数据源请求306已经完成。在一些示例中,数据插件250a基于第一事务来提供数据;例如,数据可以指示第一事务已经完成,或者可以基于在服务响应324中从服务260a接收到的数据来生成。在操作328处,响应于数据源252a完成数据源请求306,数据插件250a输出插件数据330。另外,响应于确定已经执行了与第一数据插件250a相关联的未决请求282的所有动作(在该示例中,为第一动作),第一数据插件250a生成插件完成指示334。在一些示例中,为插件完成指示334提供插件数据330。

在操作332处,导出插件244a获得插件数据330,并且在操作336处确定第一数据插件250a已经执行了与未决请求282相关联的所有动作。同样地,在操作332处,导出插件244a响应于未决请求282来确定插件数据330将被传输到第一spa216a,并且在操作338处使包括插件数据330的数据增量被传输。例如,导出插件244a可以执行由插件服务240a提供的“传输数据增量”方法。在一些实现方式中,取决于何时提供插件数据的计时,导出插件244a可以从多个插件数据项(诸如插件数据330)收集数据。例如,导出插件244a可以被配置为响应于计时器事件,诸如但不限于:在接收到在数据增量中所包括的第一插件数据(诸如插件数据330)的50毫秒之内,来传输数据增量。在操作340处,插件服务240a响应于操作338,而调用数据连接控制器234上的方法,所述方法使数据增量消息284经由网络连接230被传输到第一spa实例216a。由于这是响应于未决请求282而传输的第一数据增量消息,其可以在操作338处由导出插件244a来指示,因此数据增量消息284可以包括“第一消息”指示。在操作342处,第一spa实例216a响应于数据增量消息284;例如,第一spa实例216a可以被配置为基于数据增量消息284来自动地更新模型,并且对呈现在显示设备220上的spa视图222a做出对应的改变。

在操作346处,数据源252b接收服务响应344(或者以其他方式确定与服务260b的第二事务已经完成),并且响应于数据源请求316而将对应的数据提供给数据插件250b。结果,如针对操作328、336、338和340所描述的,相应的操作348、352、358和360导致第二数据增量消息362,其包括基于服务响应344生成的插件数据350将经由网络连接230被传输到第一spa实例216a。在操作364处,第一spa实例216a响应于第二数据增量消息362。

在该特定示例中,在操作346处,数据源252b尚未完成数据源请求316,并且数据源252b与数据源252b执行另一事务,所述事务被图示为第三服务请求354。第三服务请求354最终导致来自服务260b的服务响应366,指示第三事务已经完成。结果,如针对操作326、328、332、338和340所描述的,相应的操作368、370、374、380和382使得第三数据增量消息384将经由第一连接230被传输到第一spa实例386。如针对操作328所描述的,在操作370处,响应于确定已经执行与第二数据插件250b相关联的未决请求282的所有动作(在该示例中,第二动作),第二数据插件250b生成插件完成指示376。在一些示例中,为插件完成指示376提供插件数据372。由于所有数据插件都已经完成其针对未决请求282的动作,因此第三数据增量消息384将是响应于未决请求282而传输的最后的数据增量消息,这可以由导出插件244a在操作380处响应于在操作378处接收到插件完成指示376而进行指示,第三数据增量消息384可以包括“请求完成”指示。在一些实现方式中,可以将额外的请求完成消息传输到第一spa实例216a。在操作386处,第一spa实例216a响应于第三数据增量消息384。结果,第一spa实例216a可以向数据服务实例162e传输另一复合请求消息(未示出),从而开始另一请求生命周期。

图4图示了类似于图3的示例,但是其中,响应于从第一spa实例接收到新的复合请求消息402而取消了未决的活动,同时存在当前未决的复合请求282。在该示例中,已经执行了在图3中所描述的相同操作300、302、304、308、312、314、318、322、326、328、332、336、338、340和342。结果,在图4中的操作342处,已经完全执行与第一数据插件250a相关联的第一动作,并且已经将包括插件数据330的数据增量消息284传输到第一spa实例216a。另外,尚未完全执行未决请求282的第二动作,并且服务260b尚未完成由图4中的服务请求320所指示的第二事务。

在操作400处,第一spa实例216a生成第二复合请求402,并且经由网络连接230将第二复合请求402传输到数据服务实例162e,同时未决请求282保持未决并且未完全执行。例如,可以响应于检测到用户输入(例如,指示用户102n希望进行不同的动作)或计时器到期(例如,看门狗计时器指示花费了太长时间来完成未决请求282)来执行操作400。

结果,如在操作302中,在操作404处,第二复合请求402被路由到插件服务240a。在操作406处,插件服务240a确定当已经接收到第二复合请求402时,针对复合请求280的先前的未决请求282保持未决。在一些实现方式中,如在图4中所示的,插件服务240a被配置为响应于在当前未决请求仍然未决时接收到新的复合请求,来终止当前未决请求以及任何相关的未决动作和服务事务。因此,在操作408处,响应于在操作406处确定未决请求282仍然未决,插件服务250a向数据插件指示尚未完全执行的未决请求282的动作以终止于未决请求282相关联的动作。那时,仅第二数据插件250b尚未完全执行其动作。在操作410处,第二数据插件250b响应于操作408,来指示数据源252b终止数据源请求316和/或针对未决请求282执行的任何其他活动。在操作412处,数据源252b响应于在操作410中发出的指令,来终止对数据源请求316和/或未决请求282正在执行或计划待执行的任何活动。在该示例中,数据源252b指示服务260b终止与未完成的服务请求320相关联的第二事务。在操作414处,服务260b响应于在操作412中发出的指令,来终止第二事务和/或针对服务请求420、数据源请求316和/或未决请求282正在执行或计划将执行的任何其他活动。

在操作416处,服务260b通知数据源252b已经执行或将要执行操作414(例如,服务260b可以确认在操作412中发出的指令,但完成与终止有关的活动在操作416之后)。在操作418处,数据源252b通知第二数据插件250b已经或者将要执行操作412。在操作420处,第二数据插件250a通知插件服务240a已经或者将要执行操作410。在操作422处,响应于在操作420处的通知(以及来自其他适用数据插件的其他这样的通知),插件服务250a完成当前未决请求282的终止。在一些实现方式中,在操作422处,插件服务250a可以使“复合请求被取消”消息(在图4中未示出)经由网络连接230传输到第一spa实例216a。第一spa实例216a可以被配置为在复合请求280中所指示的所有动作已经完成之前,更新模型以反映针对复合请求280取消第一未决请求282。

响应于在操作422处接收到第二复合请求402和完成未决请求282的终止,插件服务240a开始新的复合响应生命周期,其中,用于管理复合响应生命周期的第二复合请求402的第二未决请求430与针对先前未决请求282描述的类似。在该示例中,第二复合请求402标识与第一数据插件250a相关联的一个或多个动作以及与第二数据插件250b相关联的一个或多个动作。结果,如针对图3中的相应操作304、308、312、314、318和322的先前描述类似的,执行操作432、436、440、442、446和450。

图5图示了其中第一spa实例216a和数据服务实例162e执行与针对不同spa(被称为“第二spa”)的预取代码和数据有关的活动的示例。在该示例中,由第一spa实例2l6a发起针对所选择的spa的预取。例如,第一spa实例216a可以被配置为标识用户102n最近或频繁使用的spa应用,并且经由架构212发起针对第二spa的预取。在一些实现方式中,响应于针对第一spa实例216a请求执行针对第二spa的预取,架构212取回第二spa代码214b,第二spa代码214b被配置为创建第二spa的实例。另外,第一spa实例216a和/或架构212经由网络连接230传输预取请求消息520,导致新的未决请求522,新的未决请求522包括与预取数据插件510(其可以被称为“预取插件”)相关联的预取动作。预取数据插件510可以被动态地实例化。

所述预取数据插件利用被配置为与服务260b、260c和260d交互的数据源512,以及也由第二spa的实例所使用的高速缓存部分270b和270c,如在图6中所示的。在一些示例中,预取数据插件510可以使用多个数据源;例如,可以使用两个数据源,非常类似于在图6中所示的数据源252c和252d进行划分。响应于未决请求522的预取动作,数据源512与服务260c执行一个或多个事务,如预取数据服务请求524所图示的,以从服务260c获得预取响应数据526。例如,可以从服务260c中取回“最后的已知商品”(lkg)数据。在一些示例中,如果在高速缓存174的部分270c中存在预取数据530并且预取数据530未到期,则不执行预取数据服务请求524。数据源512被配置为基于从服务260c接收到的预取响应数据526来获得可高速缓存的预取数据530。所获得的可高速缓存的预取数据530被存储在高速缓存174的部分270c中;例如,与和部分270c相关联的一个或多个键值相关联。这些操作的结果是:预取请求消息520导致与第二spa相关联的高速缓存174的部分(诸如部分270b和/或270c)被新鲜数据“填充”,从而增加了高速缓存命中的可能性,这将加速第二spa的初始化阶段。

图6图示了其中客户端设备190已经从如在图2-5中所示执行第一spa实例216a转换为执行不同的第二spa实例216b、同时继续维持最初针对第一spa实例216a建立的相同网络连接的示例。在图6中所示的示例中,可高速缓存的预取数据530存在于高速缓存174的部分270c中,这与结合图5所描述的类似。在图6中,第一spa实例216a已经被取消实例化,第一spa代码2l4b已经被卸载,并且第二spa实例2l6b已经被使用第二spa代码2l4b创建。结合图7描述了该过程的一些方面。与插件服务240a的实例化和使用类似,在图2中描述了导出插件244a、数据插件250a和250b以及针对第一spa实例216a的数据源252a和252b,针对第二spa实例216b实例化和使用插件服务240b、导出插件244b、数据插件250c和250d以及数据源252c和252b。在图6中,第二spa实例216b处在初始化阶段中,并且已经由网络连接230传输了复合请求610,以取回从相关联的计算机实现的服务(例如,服务260b、260c和/或260d)获得的数据,以用于在显示设备220上渲染初始的第二spa视图222b。如结合图3所描述的,插件服务240b开始针对复合请求610的未决请求612的响应生命周期。未决请求612包括与数据插件252d相关联的动作,并且在执行该动作时,数据源252b取回被包含在预取数据530中的高速缓存数据614,导致数据增量616包括基于高速缓存数据614的数据。

在一些实现方式中,为了从第一spa实例216a转换到第二spa实例216b,架构212卸载第一spa实例216a,然后执行第二spa代码214b的预渲染部分,其实例化第二spa实例216b,然后处置第一spa实例216a以及其相关联的第一spa代码214a(这消除了第一spa视图222a),并且然后执行第二spa代码2l4b的渲染部分,导致第二spa实例216b在显示设备220上提供第二spa视图222b。由于第一spa实例216a和第二spa实例216b共享相同的持久连接230,因此第二spa实例216b的加载比经由常规的整页面加载要快得多,这是因为脚本组件(诸如架构212和第二spa代码214b)已经可用,并且高速缓存数据614在预先建立的连接230上以最小的开销从高速缓存174到达。

图7图示了在架构212和数据服务实例162e之间和之内执行的用于卸载第一spa实例216a的操作的示例。操作700至726涉及为卸载第一spa实例216a而执行的操作。作为由架构212执行的应用卸载过程的一部分,在操作700处,架构212传输卸载应用插件服务管理消息702(其可以被称为“卸载应用消息”)。在操作704处,数据连接控制器234指示插件服务240a执行卸载操作。在操作706处,针对第一spa实例216a的插件服务240a发起所请求的卸载操作,其包括向数据插件发出卸载命令708。如果存在仍旧未决的未决请求(诸如未决请求282),则卸载命令708将终止所述未决请求,如在图4所示和所描述的。在这点上,操作710、712、714、716、718和720类似于图4中的相应操作410、412、414、416、418和420。然而,响应于在操作710处由数据插件250b接收到卸载命令708,可以通过操作710、712和714来执行额外的活动。例如,在操作712处,数据源252b可以关闭与服务260b建立的会话,所述会话不会被操作412关闭。在操作722处,插件服务240a完成在操作706处开始的卸载操作。响应于操作722完成,在操作724处,经由到架构230的网络连接230来传输卸载完成消息726。在步骤728处,响应于接收到卸载完成消息726,架构212继续卸载第一spa实例216a。

结合图1-7所描述的系统、设备和技术的详细示例将在下文中呈现以用于例示说明本公开以及其益处。这样的使用示例不应当被解释为对本公开的逻辑过程实现方式的限制,也不应当将从在本文中所描述的那些变化的用户界面方法视为在本公开的范围之外。在一些实现方式中,在图1-7中所描述的各种特征可以被实现在相应的模块中,所述模块也可以被称为和/或包括逻辑、组件、单元和/或机制。模块可以构成软件模块(例如,体现在机器可读介质上的代码)或硬件模块。

在一些示例中,可以机械地、电子地或者以其任何适当的组合来实现硬件模块。例如,硬件模块可以包括被配置为执行某些操作的专用电路或逻辑。例如,硬件模块可以包括专用处理器,诸如现场可编程门阵列(fpga)或专用集成电路(asic)。硬件模块还可以包括由软件临时配置为执行某些操作的可编程逻辑或电路,并且可以包括一部分机器可读介质数据和/或用于这样的配置的指令。例如,硬件模块可以包括被包含在被配置为执行一组软件指令的可编程处理器之内的软件。将意识到的是,在成本、时间、支持和工程考量的驱动下,决定在专用并且永久配置的电路中或者在临时配置的电路中(例如,由软件配置)机械地实现硬件模块。

因此,短语“硬件模块”应当被理解为包括能够执行某些操作的有形实体,并且可以以某种物理方式被配置或布置,即是物理构造、永久配置(例如,硬接线)的和/或临时配置(例如,编程)以某种方式操作或执行在本文中所描述的某些操作的实体。如在本文中所使用的,“硬件实现的模块”指代硬件模块。考虑其中硬件模块被临时配置(例如,编程)的示例,每个硬件模块不需要在任何一个时刻被配置或实例化。例如,在硬件模块包括由软件配置为成为专用处理器的可编程处理器的情况下,可编程处理器可以在不同时间分别被配置为不同的专用处理器(例如,包括不同的硬件模块)。软件可以因此配置一个或多个特定处理器,例如,以在一个时刻构成特定的硬件模块,并且在不同的时刻构成不同的硬件模块。使用一个或多个处理器实现的硬件模块可以被称为“处理器实现的”或“计算机实现的”。

硬件模块能够向其他硬件模块提供信息并且从其他硬件模块接收信息。因此,所描述的硬件模块可以被认为是通信耦合的。在同时存在多个硬件模块的情况下,可以通过在两个或更多个硬件模块之间或之中的信号传输(例如,通过适当的电路和总线)来实现通信。在其中在不同时间配置或实例化多个硬件模块的实现方式中,例如,可以通过在多个硬件模块可以访问的存储器设备中存储和取回信息来实现在这样的硬件模块之间的通信。例如,一个硬件模块可以执行操作并且将输出存储在存储器设备中,并且然后另一硬件模块可以访问该存储器设备以取回和处理所存储的输出。

在一些示例中,方法的至少一些操作可以由一个或多个处理器或处理器实现的模块来执行。此外,一个或多个处理器还可以在“云计算”环境中或者作为“软件即服务”(saas)来支持相关操作的性能。例如,至少一些操作可以由多台计算机(作为包括处理器的机器的示例)和/或在多台计算机之间执行,其中这些操作可以经由网络(例如,互联网)和/或经由一个或多个软件接口(例如,应用程序接口(api))访问。某些操作的执行可以分布在处理器之间,不仅驻留在单个计算机之内,而且跨多个机器部署。处理器或处理器实现的模块可以位于单个地理位置中(例如,在家庭或办公室环境或服务器场之内),或者可以跨多个地理位置分布。

图8是图示了示例性软件架构802的框图800,示例性软件架构802的各个部分可以与在本文中所描述的各种硬件架构结合使用,所述硬件架构可以实现任何上述特征。图8是软件架构的非限制性示例,并且将意识到,可以实现许多其他架构以促进在本文中所描述的功能。软件架构802可以在诸如图1中的客户端设备110、120、103和190,本地应用提供商134,网络服务器140a和140b,服务器集群150,外部服务180和服务器182之类的硬件上执行。代表性的硬件层804包括处理单元806和相关联的可执行指令808。可执行指令808表示软件架构802的可执行指令,包括在本文中所描述的方法、模块等的实现方式。硬件层804还包括存储器/存储装置810,其还包括可执行指令808和随附的数据。硬件层804还可以包括其他硬件模块812。由处理单元808保持的指令808可以是由存储器/存储装置810保持的指令808的部分。

示例性软件架构802可以被概念化为层,每个层提供各种功能。例如,软件架构802可以包括各种层和组件,诸如操作系统(os)814、库816、架构818、应用820和表示层824。在操作上,这些层之内的应用820和/或其他组件可以向其他层调用api调用824并且接收对应的结果826。所图示的层本质上是代表性的,并且其他软件架构可以包括额外的层或不同的层。例如,一些移动或专用操作系统可能不提供架构/中间件818。

os814可以管理硬件资源并且提供公共服务。os814可以包括例如内核828、服务830和驱动程序832。内核828可以充当在硬件层804与其他软件层之间的抽象层。例如,内核828可以负责存储器管理、处理器管理(例如,调度)、组件管理、联网、安全设置等。服务830可以为其他软件层提供其他公共服务。驱动程序832可以负责控制或者与底层硬件层804接口。例如,驱动程序832可以包括显示驱动程序、相机驱动程序、存储器/存储装置驱动程序、外围设备驱动程序(例如,经由通用串行总线(usb))、网络和/或无线通信驱动程序、音频驱动程序等,这取决于硬件和/或软件配置。

库816可以提供可以由应用820和/或其他组件和/或层使用的通用基础设施。库816通常提供用于供其他软件模块使用以执行任务的功能,而不是直接与os814交互。库816可以包括系统库834(例如,c标准库),其可以提供诸如存储器分配、字符串操纵、文件操作的功能。另外,库816可以包括api库836,诸如媒体库(例如,支持图像、声音和/或视频数据格式的呈现和操纵)、图形库(例如,用于在显示器上渲染2d和3d图形的opengl库)、数据库(例如,sqlite或其他关系数据库功能)和网络库(例如,可以提供网络浏览功能的webkit)。库816还可以包括各种其他库838,从而为应用820和其他软件模块提供许多功能。

架构818(有时也被称为中间件)提供可以由应用820和/或其他软件模块使用的更高级别的通用基础设施。例如,架构818可以提供各种图形用户界面(gui)功能、高级资源管理或高级位置服务。架构818可以为应用820和/或其他软件模块提供宽泛的其他api。

应用820包括内置应用820和/或第三方应用822。内置应用820的示例可以包括但不限于:联系人应用、浏览器应用、位置应用、媒体应用、消息传递应用和/或游戏应用。第三方应用822可以包括由除了特定平台的供应商之外的实体开发的任何应用。应用820可以使用经由os814、库816、架构818和呈现层824可用的功能来创建用户界面以与用户交互。

一些软件架构使用虚拟机,如虚拟机828所示。虚拟机828提供了执行环境,其中,应用/模块能够像在硬件机器(诸如图9的机器900)上执行一样执行。虚拟机828可以由主机os(例如,os814)或管理程序来托管,并且可以具有管理虚拟机828的操作以及与主机操作系统的互操作的虚拟机监视器826。与虚拟机外部的软件架构802不同的软件架构在虚拟机828之内执行,诸如os850、库852、架构854、应用856和/或呈现层858。

图9是图示了示例性机器900的组件的框图,示例性机器900被配置为从机器可读介质(例如,机器可读存储介质)读取指令并且执行在本文中所描述的任何特征。示例性机器900是计算机系统的形式,在其之内,可以执行指令916(例如,软件组件的形式)以使机器900执行在本文中所描述的任何特征。这样,指令916可以被用于实现在本文中所描述的模块或组件。指令916使未编程和/或未配置的机器900作为被配置为执行所描述的特征的特定机器来操作。机器900可以被配置为作为独立的设备来操作,或者可以被耦合(例如,联网)到其他机器。在网络部署中,机器900可以在服务器-客户端网络环境中以服务器机器或客户端机器的能力来操作,或者在对等或分布式网络环境中作为节点来操作。机器900可以被体现为例如服务器计算机、客户端计算机、个人计算机(pc)、平板计算机、膝上型计算机、上网本、机顶盒(stb)、游戏和/或娱乐系统、智能电话、移动设备、可穿戴设备(例如,智能手表)和物联网(iot)设备。此外,尽管仅图示了单个机器900,但是术语“机器”包括个体地或联合地执行指令916的机器的集合。

机器900可以包括处理器910、存储器930和i/o组件950,其可以经由例如总线902通信地耦合。总线902可以包括经由各种总线技术和协议耦合机器900的各个元件的多条总线。在示例中,处理器910(包括例如中央处理单元(cpu)、图形处理单元(gpu)、数字信号处理器(dsp)、asic或者其适当组合)可以包括一个或多个处理器912a至912n,其可以执行指令916并且处理数据。在一些示例中,一个或多个处理器910可以执行由一个或多个其他处理器910提供或标识的指令。术语“处理器”包括多核处理器,所述多核处理器包括可以同时地执行指令的核心。尽管图9示出了多个处理器,但是机器900可以包括具有单个核心的单个处理器、具有多个核心的单个处理器(例如,多核处理器)、每个具有单个核心的多个处理器、每个具有多个核心的多个处理器,或者其任何组合。在一些示例中,机器900可以包括分布在多个机器之间的多个处理器。

存储器/存储装置930可以包括主存储器932、静态存储器934或其他存储器以及存储单元936,这两者都能诸如经由总线对处理器902来访问。存储单元936和存储器932、934存储体现在本文中所描述的任何一个或多个功能的指令916。存储器/存储装置930还可以存储用于处理器910的临时、中间和/或长期数据。指令916在其执行期间还可以完全或部分地驻留在存储器932、934内、在存储单元936内、在至少一个处理器910内(例如,在命令缓存器或高速缓存存储器内)、在至少一个i/o组件950处的存储器内、或者其任何合适的组合。因此,存储器932、934,存储单元936,处理器910中的存储器以及i/o组件950中的存储器是机器可读介质的示例。

如在本文中所使用的,“机器可读介质”指代能够临时或永久存储使机器900以特定方式操作的指令和数据的设备。如在本文中所使用的,术语“机器可读介质”本身不包括瞬时电信号或电磁信号自身(诸如在通过介质传播的载波上);因此,术语“机器可读介质”可以被认为是有形的和非暂时性的。非暂时性、有形机器可读介质的非限制性示例可以包括但不限于:非易失性存储器(诸如闪存或只读存储器(rom))、易失性存储器(诸如静态随机存取存储器(ram)或动态ram)、缓存存储器、高速缓存存储器、光学存储介质、磁性存储介质和设备、网络可访问或云存储设备、其他类型的存储设备、和/或其任何合适的组合。术语“机器可读介质”适用于单个介质或多种介质的组合,其用于存储指令(例如,指令916)以供机器900执行,使得指令当由机器900的一个或多个处理器910执行时使机器900执行在本文中所描述的一个或多个特征。因此,“机器可读介质”可以指代单个存储设备,以及包括多个存储装置或设备的“基于云的”存储系统或存储网络。

i/o组件950可以包括适于接收输入、提供输出、产生输出、传输信息、交换信息、捕获测量等的各种硬件组件。被包含在特定机器中的特定i/o组件950将取决于机器的类型和/或功能。例如,诸如移动电话的移动设备可以包括触摸输入设备,而无头服务器或iot设备可以不包括这样的触摸输入设备。在图9中图示的i/o组件的特定示例绝不是限制性的,并且机器900中可以包括其他类型的组件。i/o组件950的分组仅是为了简化该讨论,并且分组绝不是限制性的。在各种示例中,i/o组件950可以包括用户输出组件952和用户输入组件954。用户输出组件952可以包括例如用于显示信息的显示组件(例如,液晶显示器(lcd)或投影仪)、声学组件(例如,扬声器)、触觉组件(例如,振动电动机或力反馈设备)和/或其他信号生成器。用户输入组件954可以包括例如字母数字输入组件(例如,键盘或触摸屏)、定点组件(例如,鼠标设备、触摸板或另一定点工具)和/或触觉输入组件(例如,提供触摸或触摸手势的位置和/或力的物理按钮或触摸屏),其被配置用于接收各种用户输入,诸如用户命令和/或选择。

在一些示例中,i/o组件950可以包括生物统计组件956和/或位置组件962,以及多种其他环境传感器组件。生物统计组件956可以包括例如用于检测身体表情(例如,面部表情、声音表情、手势或身体姿势或眼睛跟踪)、测量生物信号(例如,心率或脑电波)并且标识人(例如,经由基于语音、视网膜和/或面部的标识)的组件。位置组件962可以包括例如位置传感器(例如,全球定位系统(gps)接收器)、高度传感器(例如,可以从中得出高度的气压传感器)和/或取向传感器(例如,磁力计)。

i/o组件950可以包括通信组件964,其实现可操作用于经由相应的通信耦合件972和982将机器900耦合到(一个或多个)网络970和/或(一个或多个)设备980的多种技术。通信组件964可以包括一个或多个网络接口组件或其他合适的设备以与(一个或多个)网络970接口。通信组件964可以包括例如适于提供有线通信、无线通信、蜂窝通信、近场通信(nfc)、蓝牙通信、wi-fi和/或经由其他模态进行通信的组件。(一个或多个)设备980可以包括其他机器或各种外围设备(例如,经由usb耦合)。

在一些示例中,通信组件964可以检测标识符,或者包括适于检测标识符的组件。例如,通信组件964可以包括射频标识(rfid)标签读取器、nfc检测器、光学传感器(例如,一维或多维条形码或其他光学码)和/或声学检测器(例如,麦克风以标识经标记的音频信号)。在一些示例中,可以基于来自通信组件962的信息来确定位置信息,诸如但不限于:经由互联网协议(ip)地址的地理位置,经由wi-fi、蜂窝、nfc、蓝牙或其他无线站标识和/或信号三角测量的位置。

尽管已经描述了各种实施例,但是所述描述旨在是示例性的而不是限制性的,并且应当理解,在实施例的范围内,可能有更多的实施例和实现方式。尽管在附图中示出了特征的许多可能组合并且在本详细描述中进行了讨论,但是所公开特征的许多其他组合也是可能的。除非特别限制,否则任何实施例的任何特征可以与任何其他实施例中的任何其他特征或元素组合或者利用其来替代。因此,可以理解,本公开中示出和/或讨论的任何特征可以以任何合适的组合一起实现。因此,除了根据所附权利要求以及其等同物之外,不限制实施例。同样,可以在所附权利要求的范围内进行各种修改和改变。

尽管前面已经描述了被认为是最佳模式和/或其他示例,但是应当理解,可以在其中进行各种修改,并且可以以各种形式和示例来实现在本文中所公开的主题,并且这些教导可以应用于许多应用中,本文仅描述了其中的一些。所附权利要求旨在要求保护落入本教导的真实范围内的任何和所有应用、修改和变化。

除非另有说明,否则本说明书(包括所附权利要求书)中阐述的所有测量、值、等级、位置、幅度、尺寸和其他规格都是近似的,并不精确。其旨在具有与其所涉及的功能以及其所属领域中的习惯相一致的合理范围。

保护范围仅由所附的权利要求书限制。当根据本说明书和随后的申请过程进行解释时,该范围旨在并且应当被解释为与权利要求中所使用的语言的普通含义相一致一样宽泛,并且涵盖所有结构和功能上的等同物。尽管如此,所有权利要求书都不旨在涵盖不满足专利法第101、102或103条要求的主题,也不应当以这种方式对其进行解释。特此拒绝对这样的主题的任何非预期的接受。

除以上所述外,没有任何陈述或示出的内容旨在或应当被解释为导致任何组件、步骤、特征、对象、利益、优势或等价物贡献给公众,而无论是否在权利要求中叙述。

将理解的是,在本文中所使用的术语和表达具有关于其对应的相应调查和研究领域的与该术语和表达相一致的普通含义,除非本文另外阐述了特定含义。诸如第一和第二等的关系术语仅用于区分一个实体或动作与另一实体或动作,而不必要求或暗示在这种实体或动作之间的任何实际的这种关系或次序。术语“包括”、“包含”或其任何其他变型旨在覆盖非排他性包含,使得包括元素列表的过程、方法、物品或装置不仅包括那些元素,而且可以包括未明确列出或者这样的过程、方法、物品或装置所固有的其他元素。在没有进一步约束的情况下,以“一”或“一个”开头的元素并不排除在包括该元素的过程、方法、物品或装置中存在其他相同元素。

提供本公开的摘要以允许读者快速地确定技术公开的本质。提交的前提是,其不会用于解释或限制权利要求的范围或含义。另外,在前述详细说明中,能够看到,为了简化本公开,在各个示例中将各个特征分组在一起。本公开的方法不应当被解释为反映以下意图:权利要求需要比每个权利要求中明确记载的特征更多的特征。而是,如所附权利要求所反映的,发明主题在于少于单个公开示例的所有特征。因此,以下权利要求由此被并入到详细描述中,其中,每个权利要求独立地作为单独要求保护的主题。

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