用于虚拟环境的控制反转组件服务模型的制作方法
【专利说明】
【背景技术】
[0001]在计算领域内,许多场景涉及在设备的虚拟环境内的应用的执行,例如:执行在web浏览器内的web应用;针对计算环境开发的而非由设备提供的代码(例如针对Java虚拟机设计的Java代码);以及隔离虚拟机内的不受信任代码执行。虚拟机内的应用执行而非设备的原生进程可以改进应用在执行期间的兼容性和安全性。
[0002]所述应用通常调用指向设备的硬件或软件组件的请求。例如,图形硬件组件可以提供渲染功能(例如渲染三维场景的图像),该功能可以被设备上的各种应用执行进行调用。所述硬件组件可以对于使用设备的计算环境执行的原生应用可便利地访问,并且可以在更受限的基础上被暴露给在设备的虚拟环境内执行的应用。例如,图形渲染组件可以提供相对低级和广泛的由应用进行的访问,并且可以提供更受限的代表在web浏览器内执行的web应用的渲染功能。所述限制可以被实现为鉴于由虚拟环境提供的较不受信任的代码环境(例如通常认为在web浏览器中运行的代码具有比已被安装在设备上的原生代码更低级别的信任)和/或基于虚拟环境内的组件的抽象(例如,并非提供硬件组件的设备专用功能,虚拟环境可以呈现广泛集合的被许多硬件组件和设备支持的功能)而选择的和/或合适的。最后,许多虚拟环境可以使应用能够调用设备的功能,但可以在直到所述对设备功能的调用完成之前都阻塞应用的执行。
【发明内容】
[0003]提供本
【发明内容】
来以简化形式介绍下面在【具体实施方式】中进一步描述的概念的选集。本
【发明内容】
不旨在标识所要求权利的主题的关键因素或必要特征,其也不旨在用于限制所要求权利的主题的范围。
[0004]虚拟环境内的应用与设备组件进行交互的典型模型可能存在某些缺陷。作为第一示例,所述应用可能不能访问广泛范围的所述组件的功能。作为第二示例,该模型中的组件调用效率可以经由所述设备不能利用组件专用特征或优化技术而降低。作为第三示例,直到所述组件请求完成之前都阻塞所述web应用可以显著损害所述web应用的性能。
[0005]在本文中呈现了这样的技术,所述技术用于以可以解决这些缺陷中的一些和/或实现另外优点的方式完成应用的组件请求。根据这些技术,所述设备可以经由回调机制通过控制反转机制便利对来自虚拟环境内的应用的组件请求进行的处理。在所述虚拟环境内执行的应用可以启动组件请求,所述组件请求涉及所述计算环境的一个或多个组件和/或组件功能,并且指定当所述组件请求完成时被调用的对所述应用的回调。所述设备可以这样来完成该组件请求,其通过存储所述应用、所识别的组件和/或组件功能的关联,并且然后将所述组件请求发送给所述关联的组件。所述设备可以然后恢复所述应用在所述虚拟环境内的执行。当所述设备随后检测到所述组件请求被所述组件完成时,所述设备可以识别关联于所述组件请求的一个或多个回调,并且可以调用所述回调以便对所述组件请求的结果执行处理,和/或向所述应用通知所述组件请求的完成。该模型可以加速对由虚拟环境内的应用发出的组件请求的完成。
[0006]为达到前述和相关目的,下面的说明书和附图阐述了特定示例性方面和实现。这些指示了一个或多个方面可以被使用所采用的各种方式中的仅一些。当结合附图考虑时,本公开的其它方面、优点和新颖特征从下面的详细说明书中将变得显而易见。
【附图说明】
[0007]图1是一种不例性场景的图不,所述场景表现用于完成在虚拟环境内执行的应用的组件请求的第一模型的特征。
[0008]图2是一种不例性场景的图不,所述场景表现用于完成在虚拟环境内执行的应用的组件请求的第二模型的特征。
[0009]图3是一种示例性场景的图示,所述场景表现根据在本文中呈现的技术的、用于完成在虚拟环境内执行的应用的组件请求的模型的特征。
[0010]图4是一种根据在本文中呈现的技术的、完成在虚拟环境内执行的应用的组件请求的示例性方法的流程图。
[0011]图5是一种根据在本文中呈现的技术的、被配置为完成在虚拟环境内执行的应用的组件请求的示例性系统的组件框图。
[0012]图6是一种示例性计算机可读介质的图示,所述计算机可读介质包括被配置为体现在本文中阐述的条款中的一个或多个的处理器可执行指令。
[0013]图7是一种示例性场景的图示,所述场景表现根据在本文中呈现的技术的、计算环境内的组件服务的第一实现的特征。
[0014]图8是一种示例性场景的图示,所述场景表现根据在本文中呈现的技术的、计算环境内的组件服务的第二实现的特征。
[0015]图9是一种示例性场景的图示,所述场景表现两种根据在本文中呈现的技术的、用于完成组件请求产生组件结果的技术的特征。
[0016]图10示出了一种示例性计算环境,其中,在本文中阐述的条款中的一个或多个可以在所述计算环境中实现。
【具体实施方式】
[0017]现在参考附图描述所要求权利的主题,其中,自始至终,相同标号用于指示相同单元。在下面的描述中,为进行解释,阐述了大量特定细节以便提供对所要求权利的主题的彻底理解,然而明显的是,所要求权利的主题可以在没有这些特定细节的情况下实现。在其它情况下,以框图形式示出结构和设备以便帮助描述所要求权利的主题。
[0018]A.引言
在计算领域内,许多场景涉及应用在设备上在虚拟环境内而非在该设备的原生计算环境内执行。作为第一示例,web浏览器可以为执行例如JavaScript和超文本标记语言(HTML)内容的不依赖设备的代码提供标准化平台。作为第二示例,Java虚拟机(JVM)可以在一般化计算设备与代表Java应用的设备原生功能之间提供桥梁(例如,将一般化存储器分配请求翻译为设备的存储器模型)。作为第三示例,针对第一设备的原生环境设计的代码可以通过仿真器在完全第二设备上执行,其中,所述仿真器在第二设备内提供对第一设备的模拟。作为第四示例,不受信任的代码可以在“沙盒”或虚假机器内执行,从而可以将恶意操作隔离到该虚假机器,并且,可以在没有破坏设备的风险的情况下由设备对不受信任代码在虚假设备上的效果进行评估。
[0019]这些和其它场景呈现应用在虚拟环境内的执行。在许多所述场景中,除利用虚拟环境的资源外,应用可以涉及与设备的组件进行交互。作为第一示例,应用可以与设备的相机进行交互,例如以由相机捕获的相片图片开始的相片编辑应用。作为第二示例,位置感知应用可以请求根据设备的全球定位系统(GPS)接收器被通知设备当前位置或设备到达特定位置。作为第三示例,增强现实应用可以利用相机来捕获世界的当前景观以及利用GPS接收器来检测设备的当前位置和观察角度,以便在设备的显示器上叠加与在由相机捕获的图片中成像的物体相关的信息。
[0020]应当认识到,所述场景涉及可能默认不被包括在虚拟环境中的设备功能。例如,web浏览器的典型配置不包括任何用于应用请求来自相机的相片或由GPS接收器检测的位置的功能,即使设备包括表现所述功能的特征的相机和/或GPS接收器。在所述动作超过虚拟环境的默认和标准化功能的情况下,设备可以提供各种机制来使所述应用能够代表设备的组件启动所述请求。
[0021]图1呈现了表现设备102的特征的示例性场景100的图示,其中,设备102由用户104操作,并且被配置为在例如操作系统的计算环境106内执行一个或多个应用。在设备102上执行的应用可以包括直接利用计算环境106的资源的原生应用120和与虚拟环境的资源进行交互的在虚拟环境内执行的应用这两者,并且其中,所述虚拟环境通过代表所驻留的应用利用计算环境106的资源来完成这些请求。在该示例性场景100中,虚拟环境包括驻留web应用110的web浏览器108。设备102可以检索web应用110并启动在web浏览器108内的执行。
[0022]设备102可以还包括一个或多个硬件组件112,例如是相机和陀螺仪,其中,应用请求与所述硬件组件112进行交互。在计算环境106内执行的原生应用120可以例如通过直接向用于组件112的硬件驱动器发出请求来启动直接与组件112进行的交互122。然而,在web浏览器108内执行的web应用110被隔离于与组件112进行直接交互,并且作为代替,与web浏览器108的资源进行交互。另外,web浏览器108可能不被配置为代表web应用110与组件112进行交互(例如,web浏览器108可能不具有任何用于从设备102的相机接收图像的功能),并且由此可能不能代表web应用110利用设备102的组件资源。在许多场景中,未提供任何可替换的交互模型,并且web应用110简单地不能与设备的组件112进行交互或甚至识别设备的组件112。
[0023]然而,将web应用110的功能限于包括web浏览器108的那些可能是不可取的。相反,使在所述虚拟环境内执行的应用能够与设备的组件112进行交互可能是可取的。为此,已设想了各种技术来实现所述访问。
[0024]图1示出了第一种所述技术,其中,提供了调用对组件112的请求的组件代理114。例如,组件代理114可以接受来自web应用110的组件请求116,与指定组件112进行交互,并且向web应用110返回组件结果118。另外,组件代理114可以对组件请求116进行审查(例如,识别诸如注入攻击的恶意代码),并且拒绝任何可能损害设备102的完整性的组件请求 116。
[0025]然而,图1的示例性场景100中所示的模型可能存在某些缺陷。作为第一示例,组件代理114的开发可以增加一些复杂性,例如向web浏览器108的虚拟环境中引入额外组件,和/或提供不同类型的与组件112的交互,该交互与原生应用120与同一组件112之间的交互122不同。作为第二示例,在所述模型中,直到组件请求116被完成之前web应用110都被阻塞(例如为了减少组件112向作为拒绝服务攻击的大量组件请求116的暴露)。作为第三示例,在所述模型中,第一组件112的组件代理114可以与第二组件112的组件代理114不同,或者后一组件112可以简单地不提供任何组件代理114或与之进行交互。
[0026]图2呈现了表现由用户104操作的设备102的特征的第二示例性场景200的图示。该设备102也表现计算环境106的特征,其中,在该计算环境106中提供了用于执行一个或多个web应用110的web浏览器108,并且该计算环境106可以利用设备102的各个组件112。为实现该交互,设备102的一个或多个组件112可以向
web浏览器108中插入例如应用编程接口 202或“插件”的接口单元。应用编程接口 202可以使web应用110能够启动对web浏览器108内的函数204的一个或多个调用206,并且可以将调用206呈献给web浏览器108外部的组件112,其中,调用206的结果被返回给web应用110。该模型因此向web浏览器108中插入用于一个或多个组件112的接口,以便实现由web应用110进行的交互。
[0027]尽管该模型可以呈现某些关于图1的组件代理模型的优点,但图2的该示例性场景200中呈现的模型可以也展现某些缺陷。作为第一示例,用于各个组件112的应用编程接口 202可能不同,从而由第一组件112的应用编程接口 202呈现的函数204可能与由第二组件112的应用编程接口 202呈现的函数204不同(例如,由相机呈现的API可能使用与由GPS呈现的API完全不同的约定)。试图设计用于使用所选组件112的web应用110的开发人员可能首先不得不学习其应用编程接口 202的功能。此外,某些组件112可能不包括应用编程接口 202,并且因此可能不参与在web浏览器108内执行的web应用110或对其可问。
[0028]B.呈现的技术
当对图1的示例性场景100中呈现的组件代理模型和图2的示例性场景200中呈现的应用编程接口(API)插件模型进行比较时,应当认识到,这些模型的缺陷产生于两个特定因素。第一,在这两种情况下,尝试将设备102的组件112的部分导入虚拟环境中涉及组件112的功能的重复或重新开发(例如,组件112可以通过原生接口向在计算环境106内执行的原生应用120、以及通过组件代理114或应用编程接口 220向在虚拟环境内执行的应用呈现功能)。该重新开发可能是低效的,并且针对同一组件112的原生接口与虚拟接口之间可能存在或出现不同,这一不同导致不同的功能集合。此外,任何不包括虚拟环境接口的组件112在虚拟环境内不可访问或可能甚至不可见。
[0029]第二,因为组件代理模型和应用编程接口(API)插件模型这两者都涉及由每个组件112提供的定制的接口,S卩,每个组件代理114或应用编程接口 202可以通过不同方式、使用不同数据标准和接口方法来进行开发。也就是说,没有任一个模型强制执行、推进或甚至鼓励接口之间的一致性,并且每个接口可以与另一接口彼此非常不同地运转。相应地,希望调用用于一个组件112的接口的开发人员可能不得不首先研宄和学习该接口,即使该开发人员熟悉用于其它组件112的接口。此外,接口之间的不一致性和不兼容性可能妨碍组件112的互操作。例如,在图2的示例性场景200中呈现的设备102中,合并相机、陀螺仪和GPS接收器的功能以提供在web浏览器108内执行的增强现实web应用110可以是可取的;例如,当相机捕获图像时,web应用110可以检测到设备102的位置(使用GPS接收器)和设备102的物理方向(使用陀螺仪),以便识别相机在捕获图像时的投影视图内的物体。然而,可能非常难以设计虚拟环境内并发且高性能地与用于每个组件112的不同接口(例如不同组件代理和/或不同应用编程接口 202)进行交互的应用。
[0030]在本文中呈现了用于实现设备102的组件112与在设备102的虚拟环境内执行的应用之间的交互的不同模型。这些技术呈现用于实现应用/组件交互的不同模型,涉及一种服务,所述服务从在虚拟环境内执行的应用接受对组件交互的请求,将那些请求传递给设备102的组件112,以及将结果返回给虚拟环境内的应用。所述服务可以通过回调机制以异步方式完成请求;例如,当启动请求时,虚拟环境内的应用可以指定当组件112完成该请求时将被服务调用的回调(例如函数、脚本或者诸如lambda表达式或抽象语法树的代码块的名称或存储器地址)。所述服务可以然后以异步方式(例如预留处理时间和资源用于对请求进行检查,以便满足安全性和访问许可)在虚拟环境外部完成该请求,并且当完成时,可以使用由组件112生成的请求结果对回调进行调用。
[0031]图3呈现了表现组件服务310的特征的示例性场景300的图示,其中,组件服务310在设备102的计算环境106内实现,用于为设备102的组件112与在设备102的虚拟环境302内执行的应用304之间的交互提供便利。在该示例性场景300中,用户104的设备102包括一套组件112,所述组件的每个可以向在计算环境106内执行的一个或多个原生应用120暴露一些功能。另外,设备102可以包括虚拟环境302(例如web浏览器108或虚拟机),一个或多个应用304可以在所述虚拟环境中被执行。尽管应用304主要与虚拟环境302的功能进行交互,但虚拟环境302的资源可能不表现用于与虚拟环境302外部的组件112进行交互的机制的特征。作为代替,设备102可以包括组件服务310,该组件服务能够代表在虚拟环境302内执行的应用304启动与设备102的每个组件112的交互314。例如,应用304可以启动对于设备102的组件112的调用314的组件请求306(例如由相机进行的图像捕获;由GPS接收器进行的对设备102的地理定位;或由陀螺仪进行的对设备102的物理方向的检测)。尽管应用304不能直接向组件112发送组件请求306,但应用304可以向组件服务310提交组件请求306,该组件服务310可以代表应用304与组件112进行通信。
[0032]如在图3的示例性场景300中进一步示出的,应用304可以通过组件请求306指定当调用314完成时将被调用的回调308,所述回调308例如是函数、脚本或者诸如lambda表达式或抽象语法树的代码块的名称或存储器地址。组件服务310可以接受组件请求306并且存储回调308,并且当从组件112接收到调用314的完成时,可以代表应用304对回调308进行调用。如果组件112的调用314生成组件结果312(例如来自相机的图像,来自GPS接收器的玮度/经度/高度坐标,或来自陀螺仪的检测到的方向度量),则组件服务310可以接收组件结果312并将其提供给回调308。组件服务310可以还向虚拟环境302内的应用304通知320调用314的完成、回调308的调用和/或组件结果312的接收。这样,组件服务310可以完成指定设备102的组件112的应用304的组件请求306。
[0033]特别当与图1的示例性场景100中所示的组件代理模型和图2的示例性场景200中所示的应用编程接口模型进行比较时,图3的示例性场景300中呈现的组件访问模型可以呈现几个优点。作为第一示例,组件服务310可以呈现这样一种模型,其用于与设备102的任意组件112进行交互,不论由每个组件112提供的功能如何,并且因此可以提供一致和标准化的接口。作为第二示例,通过以与原生应用120相同的方式启动与各个组件112的交互314,组件服务310可以减少由组件112进行的用于虚拟环境302的第二接口的冗余和低效实现。作为第三示例,通过与虚拟环境302外部的应用进行交互,可以认为组件服务310具有与在计算环境106内执行的原生应用120相同的优先权。相应地,组件112的功能的相同集合可以如被提供给在计算环境302内执行的原生应用120那样被提供给在虚拟环境302内执行的应用304。反过来,除直接与组件112进行交互316之外,原生应用120可以被设计为以与在虚拟环境302内执行的应用304相同的方式通过组件服务310与组件112进行交互318。作为第四示例,通过经由回调308与虚拟环境302内的应用304就调用314的完成进行通信,在应用304不必实现单独交互线程或其它异步机制的情况下,组件服务310可以促进组件请求306的异步完成。这些和其它优点可以通过实现根据在本文中呈现的技术的组件服务310来达到。
[0034]C.示例性实施例
图4呈现了在本文中呈现的技术的第一示例性实施例,其被示为完成从在虚拟环境302内执行的应用304接收的组件请求306的示例性方法400。示例性方法400可以被实现为例如一套指令,所述指令被存储在诸如存储器电路、硬盘驱动器的盘片、固态存储设备或者磁或光盘的设备102的存储器设备中,并且被组织为当在设备的处理器上执行时导致设备102根据在本文中呈现的技术来运转。示例性方法400开始于402,并且涉及在设备102的处理器上执行404所述指令。特别地,这些指令可以被配置为:当从在虚拟环境302内执行的应用304接收406到指定设备102的组件112和对应用304的回调308的组件请求306时,存储408关联于组件请求306和应用304的回调308 ;将组件请求306发送410给组件112 ;以及,在虚拟环境302内恢复412应用304的执行。所述指令可以还被配置为:当检测414到组件请求306被组件112完成时,检索416关联于组件请求306的回调308,以及,代表应用304对回调308进行调用418。在已达到代表应用304完成组件112的组件请求306的情况下,示例性方法400将在本文中呈现的技术应用于图3的示例性场景300中所示的场景,并且因此结束于420。
[0035]图5呈现了在本文中呈现的技术的第二示例性实施例,其被示为示例性系统506,该示例性系统506被配置为,代表在具有处理器504的设备502的虚拟环境302内执行的应用304完成组件请求306。示例性系统506可以被实现为例如指令,所述指令存储在设备502的存储器组件中,并且被配置为,当在设备502的处理器504上执行时导致设备502根据在本文中呈现的技术来运转。示例性系统506包括组件请求启动组件508,该组件请求启动组件508被配置为:当从在虚拟环境302内执行的应用304接收到指定组件112和对应用304的回调308的组件请求306时,存储关联于组件请求306和应用304的回调308 ;将组件请求306发送给组件112 ;以及,在虚拟环境302内恢复应用304的执行。示例性系统506还包括回调调用组件510,该回调调用组件510被配置为:当检测到组件请求306被组件112完成时,检索关联于组件请求306的回调308,以及代表应用304对回调308进行调用。示例性系统506的这些组件的互操作可以使设备502能够代表在本文中呈现的技术完成从在虚拟环境302内执行的应用304接收的组件请求306。
[0036]仍然另一实施例涉及计算机可读介质,所述计算机可读介质包括被配置为应用在本文中呈现的技术的处理器可执行指令。所述计算机可读介质可以包括例如计算机可读存储介质,所述计算机可读存储介质涉及诸如存储器半导体(例如利用静态随机访问存储
器(SRAM)、动态随机访问存储器(DRAM)和/或同步动态随机访问存储器(SDRAM)技术的半导体)、硬盘驱动器的盘片、闪存器设备或者磁或光盘(例如⑶-R、DVD-R或软盘)的有形设备,对一套计算机可读指令进行编码,所述计算机可读指令当被设备的处理器执行时导致该设备实现在本文中呈现的技术。所述计算机可读介质可以还包括(作为区别于计算机可读存储器介质的一类技术)各种类型的通信介质,例如是信号,所述信号可以通过各种物理现象(例如电磁信号、声波信号或光信号)并且在各种有线场景(例如经由以太网或光缆)和/或无线场景(例如是诸如WiFi的无线局域网(WLAN)、诸如蓝牙的个域网(PAN)或者是蜂窝或射频网络)中进行传播,并且对一套计算机可读指令进行了编码,所述计算机可读指令当被设备的处理器执行时导致该设备实现在本文中呈现的技术。
[0037]可以通过这些方式设想的示例性计算机可读介质在图6中示出,其中,实现600包括在其上对计算机可读数据604进行了编码的计算机可读介质602 (例如CD-R、DVD-R或硬盘驱动器的盘片)。该计算机可读数据604接着包括一套计算机指令606,所述一套计算机指令606被配置为根据在本文中阐述的原理来运转。在一个所述实施例中,处理器可执行指令606可以被配置为执行诸如图4的示例性方法400的方法608,该方法608代表在虚拟环境302内执行的应用完成组件请求306。在另一所述实施例中,处理器可执行指令606可以被配置为实现诸如图5的示例性系统506的系统,该系统用于代表在虚拟环境302内执行的应用完成组件请求306。该计算机可读介质的某些实施例可以包括计算机可读存储介质(例如硬盘驱动器、光盘或闪存器设备),所述计算机可读存储介质被配置为存储以这种方式配置的处理器可执行指令。本领域的技术人员可以设想许多所述被配置为根据在本文中呈现的技术运转的计算机可读介质。
[0038]D.变型
可以设想在本文中讨论的技术具有许多方面的变型,并且某些变型可以呈现额外优点和/或减少关于这些和其它技术的其它变型的缺陷。此外,某些变型可以结合着来实现,并且某些变型通过协同合作可以表现额外优点和/或减少的缺陷的特征。这些变型可以并入各种实施例(例如图4的示例性方法400和图5的示例性系统506)中以便对所述实施例授予单个和/或协同的优点。
[0039]Dl.场景
可以在这些技术的实施例之间改变的第一方面涉及可以在其中利用所述技术的场景。
[0040]作为该第一方面的第一变型,在本文中呈现的技术可以通过许多类型的设备502来利用,所述设备例如是服务器、服务器群、工作站、膝上电脑、平板电脑、移动电话、游戏机和网络装置。
[0041]作为该第一方面的第二变型,在本文中呈现的技术可以用于为在许多类型的虚拟环境302内执行的应用304提供服务,所述虚拟环境例如是web浏览器、模拟和/或仿真的虚拟机、中间件平台和/或隔离构造。
[0042]作为该第一方面的第三变型,在本文中呈现的技术可以用于为许多类型的应用304提供服务,所述应用例如是用各种解释型和/或编译型语言编写的web应用、文件共享应用、媒体渲染应用和数据驱动客户端应用。
[0043]作为该第一方面的第四变型,在本文中呈现的技术可以涉及许多类型的组件112,所述组件例如是人类输入设备(例如键盘、鼠标、声音麦克风、语音处理器、凝视定位器和自然手势接口);传感器(例如GPS接收器、陀螺仪、指南针和亮度级别检测器);通信设备(例如有线网络适配器、局域网(LAN)无线适配器和/或蜂窝无线适配器);输出设备(例如监视器、音频扬声器、打印机和触觉反馈生成器);以及设备控制器和/或设备接口(例如机器控制系统)。组件112可以还包括各种软件组件,例如是文件系统、数据存储、平台、应用编程接口(API)或对象。
[0044]作为该第一方面的第五变型,组件服务310可以通过各种方式与设备102的组件112进行交互。作为第一个所述示例,组件服务310可以提供“可插拔”框架,并且组件112可以提供驱动器或其它接口来实现与组件服务310的交互。作为第二个所述示例,组件服务310可以前摄地发现设备102的组件112,例如通过对设备102的设备管理器、设备控制台、系统寄存器或配置清单进行查询以确定设备102的组件112和每个组件112的功能。
[0045]作为该第一方面的第六变型,在本文中呈现的技术可以涉及去往涉及许多类型功能的所述组件112的许多类型的组件请求306,所述组件请求例如是从一个或多个传感器捕获输入;从存储设备读取数据;向存储设备写数据;执行一套计算;或调整组件112的属性。此外,所述组件请求306可以涉及许多类型的回调308,所述回调例如是应用304的函数或计算环境106的应用编程接口(API)方法的名称或存储器地址;脚本;或者诸如lambda表达式或抽象语法树的代码块。这些和其它场景可以兼容于并且有利地利用在本文中呈现的技术。
[0046]D2.组件服务
可以在这些技术的实施例之间改变的第二方面涉及组件服务310的实现。尽管组件服务310可以根据图4的示例性方法400和/或作为图5的示例性系统506来配置,但应当认识到,可以为所述实现选择许多设计细节,并且某些所述设计可以呈现相对优点和/或减少关于其它设计的缺陷。
[0047]图7呈现了表现组件服务310的第一示例性实施例的特征的示例性场景700,其中,组件服务310在设备702上实现为工作器进程主机710,该工作器进程主机710被配置为驻留工作器进程712,该工作器进程712代表各个应用304并且在虚拟环境302外部执行。在该示例性场景700中,工作器进程主机710可以:当从虚拟环境302内的应用304接收到组件请求306时,在虚拟环境302外部启动工作器进程712。该工作器进程712可以被配置为,将组件请求306发送给组件112。包括工作器进程712的指令可以由应用304、虚拟环境302、工作器进程主机710、组件112和/或设备702提供。当检测到组件请求306被组件112完成时,工作器进程主机710可以通知工作器进程712 (作为一种用于对由应用304通过组件请求306指定的回调进行调用的技术),工作器进程712接着可以对组件请求306的组件结果312执行处理,和/或向应用304通知组件请求306的完成。例如并且如图7的示例性场景700中所示,组件请求306可以指定对涉及特定组件112的设备事件704进行监视(例如对相机组件进行监视以检测图像的捕获)。设备702可以提供设备监视服务706,该设备监视服务706对所述设备事件704进行监视,并且当检测到所监视设备事件704时,生成针对工作器进程主机710的设备事件通知708。工作器进程主机710可以接着将设备事件通知708授予工作器进程712 (可选地,如果工作器进程712还未在代表应用304执行则启动工作器进程712),工作器进程710可以对组件请求306进行处理和/或向应用304通知设备事件704。这样,组件服务310可以实现为工作器进程主机710,以便实现响应于组件请求306的完成而代表应用304对回调308进行执行。
[0048]图8呈现了表现在本文中呈现的技术的第二示例性实施例的特征的示例性场景800。在该示例性场景800中,表现处理器504的特征的设备802通过提供本地服务器组件806代表在虚拟环境302内执行的应用304完成组件请求306,其中,本地服务器组件806在虚拟环境302外部执行,并且代表在虚拟环境302内执行的应用304完成组件请求306。例如,在虚拟环境302包括web浏览器以及应用304包括web应用的情况下,组件服务310可以包括表现本地部署的web服务器的特征的系统804,该系统804可以将各种组件116和/或组件请求306关联于在本地web服务器的域内进行映射的、诸如统一资源标识符(URI)的特定地址(例如,“http: //localhost/devl_camera”用于标识相机组件,和/或“http: //localhost/devl-camera”用于标识URI,其中,对该URI进行访问以从相机请求捕获相片)。当本地服务器组件806从在web浏览器内执行的应用304接收到组件请求306 (例如URI)时,系统804可以调用组件请求启动组件808来启动与组件112的交互。另外,当检测到组件请求306被组件112完成时,本地服务器组件806可以代表应用304调用服务器脚本810,以便对组件请求306的组件结果312进行评估和/或向应用304通知组件请求306的完成。这样,组件服务310可以通过本地服务器模型来实现,以便代表在虚拟环境302内执行的应用304与组件112进行交互。当实现在本文中呈现的技术时,本领域的普通技术人员可以设想许多所述实现。
[0049]D3.组件服务特征
可以在这些技术的实施例之间改变的第三方面涉及可以在组件服务310中实现的各种特征。
[0050]作为该第三方面的第一变型,组件服务310可以通过各种方式与应用304和/或虚拟环境302进行交互。作为第一个所述示例,组件服务310可以在虚拟环境302内呈现接口,并且可以使应用304能够与该组件服务接口进行交互以启动组件请求306。作为第二个所述示例,组件服务310可以不在虚拟环境302内出现,但可以检测虚拟环境302内组件请求306的启动,并且可以接收或拦截将代表应用304来完成的所述组件请求306。作为第三个所述示例,组件服务310可以与虚拟环境302集成,并且可以例如作为由虚拟环境302呈现的虚拟机的方面被暴露给应用304。
[0051]作为该第三方面的第二变型,组件服务310可以辅助虚拟环境302内的应用304发现设备102的组件112和在那里可用的功能。例如,组件服务310可以,当从虚拟环境302内的应用304接收到组件枚举请求时,组件服务310可以为应用304枚举在组件请求中可识别的设备102的组件112。可替换地或另外,当从虚拟环境302内的应用304接收到设备功能枚举请求时,组件服务310可以为应用304枚举设备102的各个组件112的组件功能(例如,捕获图像的功能;检测位置的功能;以及检测设备102的物理方向的功能)。也就是说,可以在不必识别组件112的情况下将组件112的功能呈现给应用304,其中,所述功能通过所述组件112可达到。此外,当从虚拟环境302内的应用304接收到指定组件功能(例如,“请检测设备的物理方向”)而非特定组件112的设
备功能请求时,组件服务310可以将设备功能请求翻译为组件请求,其中,该组件请求指定具有由该设备功能请求指定的组件功能的组件112(例如,将所述物理方向请求翻译为对生成所请求信息的陀螺仪组件的函数调用请求)。
[0052]作为该第三方面的第三变型,设备102可以提供各种安全机制,所述安全机制适用于组件服务310与代表应用304的组件112之间的交互。所述安全机制例如在应用304可以包括不受信任代码的情况下可以是可取的,其中,所述不受信任代码诸如是偶然从各种网站检索到的web应用或从不受信任用户接收到的移动代理。虚拟环境302其自身可以包括隔离结构,例如不受信任应用304可以在不干扰设备102的计算环境106的运转的情况下进行破坏的虚拟机。在所述场景中,使应用304能够通过组件服务310启动与组件112的组件请求306可以代表安全弱点,该安全弱点可以通过各种安全措施来减轻。作为第一个所述示例,如果认为应用304具有特定信任级别和/或许可集合,则可以认为组件服务310和/或组件请求306具有相同信任级别和/或许可集合,以避免使应用304的特权逐步升级。作为第二个所述示例,组件服务310可以对组件请求306和/或组件结果312进行针对安全问题的仔细检查,例如包括恶意代码或者对私有用户信息的访问或泄露。作为第三个所述示例,组件服务310可以将用户104牵涉到信任确定中;例如,在组件请求306指定组件112的组件功能的情况下,组件服务310可以向用户104呈现对启动标识由应用304请求的组件功能的组件请求306的提议(例如,“该应用正请求对陀螺仪传感器的访问”),并且可以仅在从用户104接收到对该提议的接受之后启动组件请求306。
[0053]作为该第三方面的第四变型,在组件112完成组件请求306之后,组件服务310可以通过各种方式代表应用304完成组件请求306。作为第一个所述示例,关联于组件请求306的回调308可以在虚拟环境302内(例如在web浏览器内被执行的客户端Javascript)、在虚拟环境302外(例如在计算环境106内执行的原生指令)、和/或在另一虚拟机内(例如作为利用Node, js服务器端Javascript模块并且被web浏览器执行的服务器端Javascript)被组件服务310调用。
[0054]作为该第三方面的该第四变型的第二示例,如果对组件112的组件请求306产生组件结果312,则组件服务310可以通过各种方式将组件结果312传递给回调308和/或应用304。图9呈现了表现组件结果312向应用304的传递方面的两个变型的特征的示例性场景900。在该示例性场景900中,设备502提供在虚拟环境302内执行的应用304,以及应用304向其发出组件请求306的一套组件112。例如,设备502可以包括能够检测玮度和经度坐标的GPS接收器组件,以及能够捕获相片906的相机组件。设备502可以包括用于向应用304提供组件服务310的、图5中所示的示例性系统506的变体,例如,被配置为代表应用304启动与组件112的交互的组件请求启动组件508,以及被配置为对组件请求306中由应用304指定的回调308进行调用的回调调用组件510。此外,组件服务310可以通过各种方式处理组件112的组件结果312。作为第一个所述示例,GPS接收器组件可以包括组件结果312的过度详细或“聊天式”的集合,例如频繁的坐标流。然而,应用304可能仅偶尔使用所述坐标(并且可能仅一次),以及,针对每个组件结果312对回调308进行调用可能是不可取的。作为代替,组件服务310可以生成具有比未压缩组件结果312小的尺寸的已压缩组件结果,例如在扩展的时间段内对由GPS接收器报告的坐标的已聚合集合。可替换地或另外,应用304可以指定所请求的结果类型(例如对应用304有用的来自组件112的数据的类型),并且已压缩的组件结果可以排除与由应用304标识的所请求结果类型不相关的、至少一个组件结果312的至少一部分(例如,如果GPS接收器报告每分钟三十个坐标,并且应用304仅使用每分钟一个坐标,则组件服务310可以排除每分钟所接收坐标中的29个)。在某些所述场景中,压缩可以是用户可选择的;例如,用户104可以具有对报告给应用304的数据的压缩偏好(例如,提供某些个人信息,以及拒绝其它个人信息),并且,组件服务310可以根据用户104的压缩偏好生成已压缩组件结果。
[0055]图9的示例性场景900中所示的另一变型涉及使用存储器缓冲器来将组件结果312呈现给应用304和/或回调308。例如,在某些场景中,设备服务310可以直接将由组件112生成的数据返回给应用304或回调308,但在其它场景中,这可能是不可取的(例如在数据量大的情况下)。因此,组件服务310可以将组件结果312存储在对应用304和/或回调308可访问的存储器区域904中(例如由相机生成的相片906可以被存储于的存储器块),并且可以简单地向应用304和/或回调308通知存储器区域904的存储器地址,从而,如果需要,则应用304和/或回调308可以访问组件结果312。
[0056]作为该第三方面的第五变型,组件服务310可以通过许多通信机制与应用304和/或回调308进行通信。作为一个所述示例,组件服务310可以间歇地与应用304和/或回调308进行通信,或者可以贯穿组件请求306的生命周期维持通信信道。例如,在图8的示例性场景800中,本地服务器组件806可以被配置为:在由在虚拟环境302内执行的应用304启动的通信会话期间接收组件请求306 (例如,通过web服务器启动的超文本传输协议(HTTP)会话);可以直到组件请求306完成之前都维持该通信会话;以及,可以在终止与应用304的通信会话之前经由该通信会话向应用304通知组件请求306的完成。此外,可以允许应用304向服务器查询关于组件请求306的状态更新、递送请求以中止组件请求306等。
[0057]作为该第三方面的第六变型,除为在虚拟环境302内执行的应用304提供服务之夕卜,组件服务310可以代表其它进程启动与设备102的组件112的交互。作为第一个所述示例,组件服务310可以,当从设备102上在虚拟环境302之外执行的应用304接收到组件请求306时,存储关联于组件请求306和应用304的回调308,以及,代表应用304将组件请求306发送给组件112。(例如,如图3的示例性场景300中所示,并非直接与组件112进行交互316,原生应用120可以选择通过组件服务310与组件112进行交互318,并且组件服务310可以与由在虚拟环境302内执行的应用304启动的那些等价地接受和处理所述组件请求306)。
[0058]作为该第三方面的该第六变型的第二示例,组件服务310可以还代表远程进程调用对设备102的组件112的组件请求306。例如,当从在第二设备上执行的远程进程接收到组件请求306时,组件服务310可以存储关联于组件请求306和该远程应用的回调308,并且将组件请求306发送给组件112 ;以及,当检测到关联于远程进程的组件请求306完成时,组件服务310可以代表该远程应用对回调308进行调用。此外,远程应用的回调308可以在虚拟环境302内被调用(例如作为沙盒隔离结构)。可替换地或另外,远程应用可以代表在虚拟环境302内执行的应用304调用组件请求306 ;即,并非将组件请求306直接提交给组件服务310,应用304可以与远程服务器上的云服务进行交互,并且该云服务可以与组件服务310进行联系以代表在虚拟环境302内执行的应用304启动组件请求306。在某些所述场景中,组件服务310可以仅代表受信任的远程进程接受和处理请求。例如,应用304可以包括至少一个证书(例如用户名和密码),并且从远程进程接收的组件请求306包括至少一个代表应用304对组件请求306进行认证的证书;以及,组件服务310可以,在将组件请求306发送给组件112之前,对组件请求306的证书进行认证。本领域的普通技术人员可以将许多所述特征包括在本文中提供的技术的实现中。
[0059]E.计算环境
图10和下面的讨论提供对用于实现本文中阐述的条款中的一个或多个的实施例的合适计算环境的简明、一般描述。图10的运行环境是合适运行环境的仅一个示例,并且不旨在关于运行环境的使用范围或功能建议任何限制。示例性计算设备包括但不限于个人计算机、服务器计算机、手持或膝上设备、移动设备(例如移动电话、个人数字助理(PDA)、媒体播放器等)、多处理器系统、消费电子、迷你计算机、大型计算机、包括以上系统或设备中的任一个的分布式计算环境等。
[0060]尽管不是必需,但是在被一个或多个计算设备执行的“计算机可读指令”的一般上下文中描述了实施例。计算机可读指令可以经由计算机可读介质(在下面讨论)来分布。计算机可读指令可以被实现为诸如函数、对象、应用编程接口(API)、数据结构等的、执行特定任务或实现特定抽象数据类型的程序模块。通常,计算机可读指令的功能在各种环境中可以根据需要被合并或分布。
[0061]图10示出了系统1000的示例,该系统1000包括被配置为实现本文中提供的一个或多个实施例的计算设备1002 O在一种配置中,计算设备1002包括至少一个处理单元1006和存储器1008。取决于计算设备的准确配置和类型,存储器1008可以是易失性的(例如像RAM)、非易失性的(例如像R0M、闪存器等)或这两者的某种组合。该配置在图10中由虚线1004示出。
[0062]在其它实施例中,设备1002可以包括另外的特征和/或功能。例如,设备1002可以还包括另外的存储(例如可移除的和/或不可移除的),所述另外的存储包括但不限于磁存储、光存储等。所述另外的存储在图10中由存储1010示出。在一个实施例中,用于实现本文中提供的一个或多个实施例的计算机可读指令可以是在存储1010中。存储1010可以还存储用于实现操作系统、应用程序等的其它计算机可读指令。计算机可读指令例如可以被加载到存储器1008中以便由处理单元1006进行执行。
[0063]术语“计算机可读介质”当用在本文中时包括计算机存储介质。计算机存储介质包括使用任意这样的方法或技术实现的易失性和非易失性的、可移除和不可移除的介质,其中,所述方法或技术用于存储诸如计算机可读指令或其它数据的信息。存储器1008和存储1010是计算机存储介质的示例。计算机存储介质包括但不限于:RAM、R0M、EEPR0M、闪存器或其它存储器技术,CD-ROM、数字光盘(DVD)或其它光存储,卡式磁带、磁带、磁盘存储或
其它磁存储设备,或者任意其它可以用于存储所需信息并且可以被设备1002访问的介质。任意所述计算机存储介质可以是设备1002的部分。
[0064]设备1002可以还包括允许设备1002与其它设备进行通信的(多个)通信连接1016。(多个)通信连接1016可以包括但不限于:调制解调器、网络接口卡(NIC)、集成网络接口、射频发送器/接收器、红外端口、USB连接或其它用于将计算设备1002连接到其它计算设备的接口。(多个)通信连接1016可以包括有线连接或无线连接。(多个)通信连接1016可以发送和/或接收通信介质。
[0065]术语“计算机可读介质”可以包括通信介质。通信介质通常将计算机可读指令或其它数据包含在诸如载波或其它传输机制的“已调制数据信号”中,并且包括任意信息递送介质。术语“已调制数据信号”可以包括这样的信号,所述信号使其特征中的一个或多个以使得将信息编码到该信号中的方式被设置或改变。
[0066]设备1002可以包括(多个)输入设备1014,例如是键盘、鼠标、笔、声音输入设备、触摸输入设备、红外相机、视频输入设备和/或任意其它输入设备。例如是一个或多个显示器、扬声器、打印机和/或任意其它输出设备的(多个)输出设备1012可以也被包括在设备1002中。(多个)输入设备1014和(多个)输出设备1012可以经由有线连接、无线连接或其任意组合连接到设备1002。在一个实施例中,来自另一计算设备的输入设备或输出设备可以用作用于计算设备1002的(多个)输入设备1014或(多个)输出设备1012。
[0067]计算设备1002的组件可以通过例如总线的各种互连来连接。所述互连可以包括例如PCI特快的外围组件互连(PCI)、通用串行总线(USB)、火线(IEEE 1394)、光总线结构等。在另一实施例中,计算设备1002的组件可以通过网络来互连。例如,存储器1008可以包括多个物理存储器单元,所述多个物理存储器单元位于通过网络互连的不同物理位置处。
[0068]本领域的技术人员将认识到,用于存储计算机可读指令的存储设备可以跨网络来分布。例如,经由网络1018可访问的计算设备1020可以存储用于实现本文中提供的一个或多个实施例的计算机可读指令。计算设备1002可以访问计算设备1020,并且下载所述计算机可读指令的部分或全部进行执行。可替换地,计算设备1002可以根据需要下载所述计算机可读指令的片段,或者,一些指令在计算设备1002处以及一些在计算设备1020处被执行。
[0069]F.术语使用
尽管已使用专用于结构化特征和/或方法动作的语言描述了主题,但应当理解,在所附权利要求中定义的主题不必限于上面描述的特定特征或动作。而是,作为实现权利要求的示例形式公开了上面描述的特定特征和动作。
[0070]当用在本申请中时,术语“组件”、“模块”、“系统”、“接口”等一般地旨在引用计算机相关实体,所述计算机相关实体是硬件、硬件和软件的组合、软件或执行中的软件。例如,组件可以是但不限于是运行在处理器上的进程、处理器、对象、可执行文件、执行的线程、程序和/或计算机。借助于示例,运行在控制器上的应用和控制器这两者都可以是组件。一个或多个组件可以驻留在进程和/或执行的线程内,以及,一个组件可以被本地化在一个计算机上和/或被分布在两个或更多个计算机之间。
[0071]此外,所要求权利的主题可以被实现为方法、装置或使用标准编程和/或工程技术的制品,所述方法、装置或制品用来生产用于控制计算机实现所公开的主题的软件、固件、硬件或其任意组合。术语“制品”当用在本文中时旨在包含可从任意计算机可读设备、载波或介质访问的计算机程序。当然,本领域的技术人员将认识到,在不脱离所要求权利的主题的范围或精神的情况下,可以对该配置做出许多修改。
[0072]在本文中提供了各种操作的实施例。在一个实施例中,所描述的操作中的一个或多个可以构成计算机可读指令,所述计算机可读指令被存储在一个或多个计算机可读介质中,其如果被计算设备执行,将导致该计算设备执行所描述的操作。不应当认为描述所述操作的一些或全部所按照的顺序暗指这些操作是必须依赖顺序的。本领域的技术人员将认识到具有本说明书的益处的可替换的排序。进一步地,应当认识到,不是全部操作必须出现在本文中提供的每个实施例中。
[0073]此外,词语“示例性”在本文中用于指用作示例、实例或例证。不必认为在本文中被描述为“示例性”的任意方面或设计有超过其它方面或设计的优点。相反,使用术语示例性旨在以具体方式呈现概念。当用在本申请中时,术语“或”旨在指包罗广泛的“或”,而非排它的“或”。也就是说,除非另外指出或从上下文中显而易见,否则“X使用A或B”旨在是指自然包含排列中的任一个。也就是说,如果X使用A ;X使用B ;或X使用A和B,则“X使用A或B”在前述情况的任一种下都满足。另外,冠词“一”和“一个”当用在本申请和所附权利要求中时,除非另外指出或从上下文中显而易见指示单数形式,否则可以一般地认为是指“一个或多个”。
[0074]同样,尽管已关于一个或多个实现示出和描述了本公开,但基于阅读和理解本说明书和附图,等价的可替换项和修改对于本领域的其他技术人员将显而易见。本公开包括全部所述修改和可替换项,并且仅受以下权利要求的范围的限制。特别关于由上面描述的组件(例如单元、资源等)执行的各种功能,除非另外指出,否则用于描述所述组件的术语旨在对应于执行所描述组件的所指定功能的任意组件(例如,即功能上等价),即使不是结构上等价于在本文中执行示出本公开的示例性实现的功能的所公开结构。另外,尽管可能已关于几种实现中的仅一种公开了本公开的特定特征,但当可能对于任意给定的或特定的应用需要和有利时,可以将所述特征与其它实现的一个或多个其它特征合并。此外,到术语“包括”、“具有”、“有”、“带有”或其变体在【具体实施方式】或权利要求中被用到的程度,所述术语旨在以与术语“包括”类似的方式是包罗广泛的。
【主权项】
1.一种系统,其被配置为,完成从设备上的虚拟环境内的应用接收的、在具有处理器和至少一个组件的设备上执行的组件请求,所述系统包括: 组件请求启动组件,其被配置为,当从在所述虚拟环境内执行的应用接收到指定组件和对所述应用的回调的组件请求时: 存储关联于所述组件请求和所述应用的所述回调,以及 将所述组件请求发送给所述组件,以及 恢复所述应用在所述虚拟环境内的执行;以及 回调调用组件,其被配置为,当检测到所述组件请求被所述组件完成时: 检索关联于所述组件请求的所述回调,以及 代表所述应用调用所述回调。2.根据权利要求1所述的系统: 由请求地址标识的所述设备的各个组件;以及 所述组件请求启动组件包括服务器,所述服务器被配置为接收指定请求地址的组件请求,其中,所述请求地址标识所述组件请求的组件。3.根据权利要求2所述的系统: 所述服务器被配置为,在由在所述虚拟环境内执行的应用启动的通信会话期间接收所述组件请求; 所述回调调用组件进一步被配置为: 直到所述组件请求完成之前都维持与所述应用的所述通信会话; 当检测到所述组件请求完成时,经由所述通信会话向所述应用通知所述组件请求的完成。4.根据权利要求3所述的系统: 所述服务器包括超文本传输协议(HTTP)服务器; 所述通信会话包括超文本传输协议(HTTP)会话;以及 所述请求地址包括标识所述组件的统一资源定位符(URL)。5.根据权利要求1所述的系统: 所述系统进一步包括,针对各个组件的、所述虚拟环境内呈现的所述组件的组件模型; 所述组件请求启动组件被配置为从所述应用接收所述组件请求作为由所述应用启动的、并且指定所述虚拟环境内的所述组件模型的组件模型请求;以及 所述系统进一步包括:回调调用组件,其被配置为,当检测到所述组件请求被所述组件完成时,通过所述虚拟环境内的所述组件模型向所述应用通知所述组件请求的完成。6.根据权利要求1所述的系统: 所述组件请求的完成包括至少一个组件结果; 所述系统进一步包括:对所述虚拟环境内的所述应用可访问的存储器区域;以及 所述回调调用组件进一步被配置为,将所述组件结果存储在所述存储器区域中。7.根据权利要求1所述的系统,所述组件请求启动组件进一步被配置为,接收所述组件请求,启动工作器进程,其中,所述工作器进程在所述虚拟环境外部并且被配置为: 将所述组件请求发送给所述组件;以及 向关联于所述回调的所述应用通知所述组件请求的完成。8.根据权利要求1所述的系统: 所述组件请求启动组件进一步被配置为: 当从在第二设备上执行的远程进程接收到组件请求时: 存储关联于所述组件请求和所述远程应用的回调,以及 将所述组件请求发送给所述组件;以及 所述回调调用组件进一步被配置为,当检测到关联于远程进程的组件请求完成时,代表所述远程应用调用所述回调。9.根据权利要求8所述的系统,所述远程进程代表在所述设备上的所述虚拟环境内执行的所述应用启动所述组件请求。10.根据权利要求9所述的系统: 所述应用包括至少一个证书; 从所述远程进程接收的所述组件请求包括至少一个证书,所述证书代表所述应用对所述组件请求进行认证;以及 所述回调调用组件进一步被配置为,在将所述组件请求发送给所述组件之前,对所述组件请求的所述证书进行认证。
【专利摘要】在计算领域中,许多场景涉及在设备的虚拟环境内的应用的执行(例如在web浏览器内的web应用执行)。应用与设备组件之间的交互通常通过硬件抽象或组件应用编程接口(API)来实现,但所述交互对于虚拟执行的应用可以提供比对于原生应用更有限和/或不一致的对组件功能的访问。作为代替,所述设备可以利用回调模型作为服务向所述虚拟环境提供硬件交互,其中,所述虚拟环境内的应用启动指定回调的组件请求,以及,所述设备使用所述组件启动所述组件请求,并且当组件请求完成时调用关联的回调。该模型可以使所述应用能与所述组件的完全功能集合进行交互,并且可以减少所述应用在所述虚拟应用内的被阻塞执行以提升应用性能。
【IPC分类】G06F9/54
【公开号】CN104903863
【申请号】CN201380065171
【发明人】B.阿盖拉伊阿卡斯, H.费托西, J.D.赫伯特, B.施勒辛格, E.亚里夫
【申请人】微软技术许可有限责任公司
【公开日】2015年9月9日
【申请日】2013年12月14日
【公告号】EP2932390A1, US20140173592, WO2014093944A1