SYSTEM AND METHOD FOR REMOTE INTERACTION WITH CLOUD-BASED CLIENT APPLICATIONS - Patent application
The system allows cross-platform interaction with cloud-based client applications by remotely emulating them on a server, addressing the limitations of device-specific client applications and enhancing user flexibility and compatibility.
Patent Information
- Application Number
- JP2024539287
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2021-12-30
- Filing Date
- 2022-12-28
- Publication Date
- 2025-01-24
AI Technical Summary
Existing client applications are limited to specific mobile device operating systems and hardware, preventing cross-platform access and requiring costly upgrades for users to use the same application on different devices.
A system and method for remotely emulating cloud-based client applications on a server, allowing interaction through local browser applications, enabling cross-platform access and interaction with cloud-based client applications on various devices.
Enables users to interact with cloud-based client applications on any device, independent of operating systems or hardware, reducing the need for device-specific installations and enhancing user flexibility and compatibility.
Smart Images

Figure 2025501929000001_ABST
Abstract
Description
[Background technology]
[0001] (CROSS REFERENCE TO RELATED APPLICATIONS) This application claims the benefit of U.S. Provisional Application No. 63 / 266,189, filed December 30, 2021, the entire contents of which are incorporated herein by reference.
[0002] The development and distribution of client applications designed to run on mobile devices has increased significantly to support the proliferation of mobile devices. Client applications provide users with access to a wide variety of functions and features and a multitude of information, and can satisfy virtually any need or interest. Although client applications provide users with flexibility and portability, client applications may be limited by both the operating system running on the mobile device and the mobile device itself. For example, such client applications can only be launched within the mobile device operating system for which they are designed. As a result, users with mobile devices running one particular operating system may not have access to or be able to use client applications designed to run in another mobile device operating system and / or on different mobile device hardware. Those mobile device users also cannot access or use client applications designed to run on entirely different (non-mobile) hardware platforms and operating systems. In addition, users with mobile devices that do not support the hardware and / or software requirements for natively installed client applications may be unable to access those client applications without a costly upgrade to the latest mobile device. Client applications are also inherently tied to the mobile device and cannot be launched or accessed via other, non-mobile devices. Summary of the Invention [Means for solving the problem]
[0003] The present invention is directed to a system and method for remotely interacting with a cloud-based client application. In accordance with the present invention, the client application can be emulated remotely on a server or other cloud-based platform. Video and audio from the cloud-based client application can be streamed in real time to a browser application running on the user's client device. The user can interact with the cloud-based client application through a local browser application as if the cloud-based client application was running natively on the client device. Input from the user can be transmitted back to the cloud-based client application running in the application engine, allowing the user to control and interact with the cloud-based client application in real time. The present invention can support interaction with any type of cloud-based client application on any type of client device (e.g., smartphones, tablets, laptops, desktop computers, gaming consoles, and the like) running any type of operating system, independent of the underlying hardware and device characteristics of the client device. An embodiment of the present invention can also support integration of the cloud-based client application into third party applications and websites. Such integration can enable third party applications and websites to more easily provide distinct features and functionality via an integrated cloud-based client application that complements and enhances interaction and engagement with those third party applications and websites.
[0004] Systems and methods are provided for enabling a variety of devices to remotely interact with cloud-based client applications. Related apparatus, techniques, and articles are also described.
[0005] In an aspect, a first request may be received from a first client device of a user to initiate an interactive session with the cloud-based client application. The cloud-based client application may be configured to execute on a second client device, which may comprise a computing platform different from the first client device. In response to the first request, an application engine from a pre-instantiated application engine pool of the plurality of pre-instantiated application engine pools may be reserved to execute the cloud-based client application remotely from the first client device. Further, interaction data may be received from the first client device upon the user engaging with first media data associated with the cloud-based client application. The cloud-based client application executing within the reserved application engine may be modified based on the interaction data received from the first client device. A second request may be received from the first client device to terminate the interactive session with the cloud-based client application, which may be modified. The reserved application engine may be deallocated in response to the second request. The application engine, which may be reserved, may be unlinked from the first client device.
[0006] Further, the first media data can be streamed from the cloud-based client application to the first client device. Additionally, second media data from the cloud-based client application, which can be modified, can be streamed to a browser application executing on the first client device. Further, an application engine, which can be reserved, can be linked to the first client device for the duration of the interactive session, and a pre-instantiated application engine can be added to a pre-instantiated application engine pool and replace an application engine, which can be reserved. Each pre-instantiated application engine pool of the multiple pre-instantiated application engine pools can be associated with a different cloud-based client application. The first request can include at least one characteristic associated with the first client device. The at least one characteristic can characterize a geographic area associated with the first client device, and modifying the cloud-based client application can include presenting, on the first client device, one or more visual features specific to the geographic area associated with the first client device. Additionally, input can be received from the user prior to the second request from the first client device to terminate the interactive session, and the interactive session with the cloud-based client application can be paused at a particular location in response to the input. Pausing can be different from terminating the interactive session. Additional input can be received to resume the interactive session on a third client device. It should be noted that the interactive session can be resumed at a particular location on the third client device in response to receiving the additional input.
[0007] In another aspect, the system may include at least one data processor and a memory storing instructions that, when executed by the at least one data processor, may cause the at least one data processor to perform operations. The operations may include receiving a first request from a first client device of a user and initiating an interactive session with a cloud-based client application, the cloud-based client application may be configured to execute on a second client device, the second client device may comprise a computing platform different from the first client device. Additionally, the operations may include reserving an application engine from a pre-instantiated application engine pool of a plurality of pre-instantiated application engine pools to execute the cloud-based client application remotely from the first client device in response to the first request. The operations may also include receiving interaction data from the first client device upon the user engaging with first media data associated with the cloud-based client application. Additionally, the operations may include modifying a cloud-based client application executing within the application engine, which may be reserved, based on the interaction data, receiving a second request from the first client device, terminating an interactive session with the cloud-based client application, which may be modified, and in response to the second request, deallocating the application engine, which may be reserved. The application engine, which may be reserved, may be unlinked from the first client device.
[0008] In yet another aspect, a non-transitory computer program product stores executable instructions that, when executed by at least one data processor forming part of at least one computing system, perform various operations. These operations can include receiving a first request from a first client device of a user and initiating an interactive session with a cloud-based client application, the cloud-based client application can be configured to execute on a second client device, the second client device can comprise a computing platform different from the first client device. Additionally, the operations can include reserving an application engine from a pre-instantiated application engine pool of a plurality of pre-instantiated application engine pools to execute the cloud-based client application remotely from the first client device in response to the first request. The operations can also include receiving interaction data from the first client device upon the user engaging with first media data associated with the cloud-based client application. Additionally, the operations may include modifying a cloud-based client application executing within the application engine, which may be reserved, based on the interaction data, receiving a second request from the first client device, terminating an interactive session with the cloud-based client application, which may be modified, and in response to the second request, deallocating the application engine, which may be reserved. The application engine, which may be reserved, may be unlinked from the first client device.
[0009] A computer system is also described, which may include one or more data processors and a memory coupled to the one or more data processors. The memory may store, temporarily or permanently, instructions that cause at least one processor to perform one or more of the operations described herein. In addition, the method may be implemented by one or more data processors, either in a single computing system or distributed among two or more computing systems. Such computing systems may be connected and may exchange data and / or commands or other instructions or the like through one or more connections, including connections such as via a network (e.g., the Internet, a wireless wide area network, a local area network, a wide area network, a wired network, or the like), via a direct connection between one or more of the computing systems, or the like. [Brief description of the drawings]
[0010] The above-described embodiments will be more fully understood from the following detailed description considered in conjunction with the accompanying drawings, in which: The drawings are not intended to be drawn to scale, and for purposes of clarity, not every component may be labeled in every drawing.
[0011] [Figure 1] FIG. 1 is a block diagram illustrating an example cloud-based client application platform for remotely interacting with cloud-based client applications.
[0012] [Diagram 2]FIG. 2 is a block diagram illustrating an example cloud-based client application platform with multiple application engine module pools for remotely interacting with cloud-based client applications.
[0013] [Diagram 3] FIG. 3 is a block diagram illustrating an example cloud-based client application platform with multiple application engine module pools and multiple application instance module pools for remotely interacting with cloud-based client applications.
[0014] [Figure 4] FIG. 4 is a flow chart illustrating an exemplary method for remotely interacting with a cloud-based client application.
[0015] [Diagram 5] FIG. 5 is a flow chart illustrating an exemplary method for remotely interacting with a cloud-based client application.
[0016] [Figure 6] FIG. 6 is another flow chart illustrating an exemplary method for remotely interacting with a cloud-based client application.
[0017] [Figure 7] FIG. 7 is a block diagram of an example computing device that may perform one or more of the operations described herein in accordance with the present embodiments. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0018] Detailed Description Certain exemplary embodiments will now be described to provide a general understanding of the principles of the structure, function, manufacture, and use of the devices and methods disclosed herein. One or more examples of these embodiments are illustrated in the accompanying drawings. Those skilled in the art will appreciate that the devices and methods specifically described herein and illustrated in the accompanying drawings are non-limiting exemplary embodiments, and the scope of the present invention is defined only by the claims. Features illustrated or described in connection with one exemplary embodiment may be combined with features of other embodiments. Such modifications and variations are intended to be included within the scope of the present invention. Furthermore, in this disclosure, similarly named components of an embodiment generally have similar characteristics, and therefore, within a particular embodiment, each feature of each similarly named component is not necessarily described in full detail therewith.
[0019] The present invention is directed to a system and method for remotely interacting with a cloud-based client application. In accordance with the present invention, a client application can be remotely rendered on a client device emulated on a cloud-based client application platform. Video and audio from the cloud-based client application can be streamed in real time to a browser or other application running on the user's client device. A user can interact with the cloud-based client application through a local browser or application as if the client application was running natively on the client device. Input from the user can be transmitted back to the remote emulated device, allowing the user to control and interact with the cloud-based client application in real time. The present invention can support remote interaction with any suitable type of cloud-based client application for any type of client device (e.g., smartphones, tablets, laptops, desktop computers, gaming consoles, and the like) running any type of operating system, independent of the underlying hardware and device characteristics of the client device. Cloud-based client applications may include, for example, mobile games or any other suitable type of client application that is designed to run on a client device, but that can be remotely rendered on the client device and remotely controlled in accordance with embodiments of the present invention.The present invention may simplify the process of client application distribution because a user may easily try, switch between, and move between many different cloud-based client applications without having to install each cloud-based client application easily on any client device or combination of client devices. Some implementations of the present invention may also support integration of cloud-based client applications into third party applications and websites. Such integration may enable those third party applications and websites to more easily provide different features and functionality through the integrated cloud-based client application that complements and enhances interaction and engagement with the third party applications and websites. For purposes of discussion only, and not limitation, the present disclosure may refer to cloud-based mobile games as exemplary cloud-based client applications to illustrate various aspects of the present invention. However, the present invention may be used within and with any suitable type of client application that is capable of being remotely rendered and remotely controlled on a client device.
[0020] FIG. 1 is a block diagram illustrating an exemplary cloud-based client application platform 100 for remotely interacting with cloud-based client applications, according to an embodiment of the present disclosure. The cloud-based client application platform 100 may include a server system 102. The server may be cloud-based (e.g., AMAZON Web Services, Google Cloud, MICROSOFT Azure, or other suitable cloud-based infrastructure provider) or may consist of dedicated server hardware. The server system 102 may include an application engine module controller 104. The application engine module controller 104 may include a plurality of application engine modules 106 and may support any suitable type of cloud-based client application. In an embodiment, each application engine module of the plurality of application engine modules 106 may be configured to emulate a particular type and configuration of a client device to execute the cloud-based client application. For example, in some implementations of the present invention, each or any of the application engine modules may comprise a suitable client device emulator. Each cloud-based client application may be executed within a separate application engine module within the plurality of application engine modules 106 as if the cloud-based client application were running natively on a given client device. The application engine module controller 104 can enable registration / deregistration of application engine modules, atomic reservations of application engine modules, queries of application engine modules, and the like.The multiple application engine modules 106 may include a first application engine module 108, a second application engine module 114, a third application engine module 120, ..., and an Nth application engine module 126, where N may be any suitable natural number and may vary over time as discussed below. Each application engine module 108, 114, 120, ..., 126 may include a video / audio module to manage video and / or audio media data generated by a cloud-based client application executing within the respective application engine module and transmit or otherwise stream such video and / or audio media data to a client device for display to a user. Each application engine module 108, 114, 120, ..., 126 may also include a state module to receive and process input from a client device (e.g., mapping input to video / audio streams, etc.) generated while a user (remotely) interacts with the cloud-based client application. Each state module may also maintain the state of the cloud-based client application executing within a respective application engine module 108, 114, 120, ... 126. For example, the first application engine module 108 may include a first video / audio module 110 in communication with the first state module 112. The second application engine module 114 may include a second video / audio module 116 in communication with the second state module 118. The third application engine module 120 may include a third video / audio module 122 in communication with the third state module 124. The Nth application engine module 126 may include an Nth video / audio module 128 in communication with the Nth state module 120.The application engine module controller 104 may maintain any suitable number of application engine modules and may register (i.e., instantiate, allocate, or otherwise create) or deregister (i.e., remove or deallocate) the application engine modules as needed. In an embodiment, the server system 102 may include multiple application engine module controllers 104, each managing a respective number of application engine modules 106 to form one or more application engine module clusters.
[0021] In some implementations of the present invention, each application engine module 108, 114, 120, ... 126 can be launched as a required container in a ReplicaSet in Kubernetes or equivalent, for example with a webRTC bridge (media channel for video / audio media data), OpenGL, or other suitable technology to support real-time media communication capabilities with a browser or other suitable application running on a client device. A ReplicaSet is a process that can launch multiple instances of an application engine module and keep a defined number of application engine modules constant. A ReplicaSet can maintain a defined number of application engine module instances launched in or with the application engine module controller 104 at any given time and prevent users from losing access to their cloud-based client applications when an application engine module fails or is inaccessible. In an embodiment, each application engine module 108, 114, 120, ... 126 may also include an envoy proxy (as either or both of an egress proxy or an ingress proxy) that may handle sanity checks and the like, for example, CORS (Cross-Origin Resource Sharing) requests or other similar requests. Additionally or alternatively, each application engine module 108, 114, 120, ... 126 may include a debug bridge to receive and process debug and other application engine commands (e.g., from the application engine reservation controller 134, discussed below).
[0022] In an embodiment, the application engine module controller 104 can include a video / audio communication module 132 to support media communication between the application engine modules of the plurality of application engine modules 106 and client devices. In an alternative embodiment, the video / audio communication module 132 can reside within the server system 102 but be external to and in communication with the application engine module controller 104. Additionally or alternatively, each or any of the application engine modules of the plurality of application engine modules 106 can include or communicate with a separate video / audio communication module 132. In other words, each or any of the plurality of video / audio communication modules 132 can reside within or be associated with each or any of the application engine modules of the plurality of application engine modules 106. In some implementations of the present invention, the video / audio communication module 132 can comprise a TURN (Traversal Using Relay NAT) server or equivalent (e.g., a STUN (Session Traversal Utilities for NAT) server, etc.) to support communication of video / audio media data between the application engine modules and client devices. Additionally or alternatively, the video / audio communication module 132 may include a suitable encoder to encode the video, for example, in h.264 or VP8 for webRTC or equivalent, however, other suitable server communication protocols, encoding techniques, and / or transmission protocols for video / audio media data are also contemplated.
[0023] The server system 102 may include an application engine reservation controller 134 in communication with the application engine module controller 104. In an embodiment, the application engine reservation controller 134 may control various aspects of the plurality of application engine modules 106, including, for example, coordinating application engine module scaling, controlling application engine module access, managing application engine module initialization for users, and the like. The application engine reservation controller 134 may include an application engine inventory and reservation module 136. The application engine inventory and reservation module 136 may track and manage an inventory of all application engine modules in the plurality of application engine modules 106. The application engine inventory and reservation module 136 may also grant application engine module reservations for use in active sessions. In some implementations of the invention, when a user requests to initiate an active session with a cloud-based client application, the application engine inventory and reservation module 136 may reserve an appropriate application engine module, load or cause to be loaded (if not already loaded or pre-loaded) the reserved application engine module with the requested cloud-based client application, populate or cause to be populated the loaded cloud-based client application with appropriate user and / or application data (e.g., user profile information, user account information, application state information, etc. to support user interaction and engagement with the cloud-based client application), and associate or otherwise link the reserved application engine module to the active session.If an application engine module is not available for the active session, the application engine inventory and reservation module 136 can instruct the application engine module controller 104 (e.g., via the application engine scalar module 138, discussed below) to add and register a new application engine module for the requested active session.
[0024] In some implementations of the present invention, the registration process can be performed asynchronously. For example, the application engine inventory and reservation module 136, once the task is completed, can wait for new application engine modules to be added and reserved by periodically polling or receiving an appropriate message from the application engine module controller 104. Once an application engine module is registered, it can be reserved for and bound to an active session. In some implementations of the present invention, an application engine module that is reserved for an active session can be accessible only to the user that requested it, and only for the lifetime of the active session. In other words, an application engine module that is reserved for a particular active session cannot be used or accessed by another user during that active session. In some implementations of the present invention, data stored in or otherwise used by a reserved application engine module during an active session can be temporary. For example, the application engine module can be deregistered at the end of the active session. Thus, any data stored or otherwise used by the application engine module during that active session may be deleted, for example, until deregistration of the application engine module. In an alternative embodiment, data stored in or otherwise used by a subscribed application engine module during an active session may be stored (e.g., in database 146), retrieved, and used by the user in and with subsequent active sessions.Once an application engine module is deregistered, it can be reused for another active session, or its computing resources can be reallocated to a different application engine module.
[0025] In an embodiment, the application engine reservation controller 134 may include an application engine scaler module 138 in communication with the application engine inventory and reservation module 136. The application engine scaler module 138 may respond to inventory and reservation changes by adding and instantiating new application engine modules to the plurality of application engine modules 106. The application engine scaler module 138 may proactively scale the number of application engine modules in the plurality of application engine modules 106, e.g., based on usage trends or other suitable metrics, to maintain a sufficiently sized pool of reservable application engine modules. For example, the application engine scaler module 138 may store a pre-determined threshold (e.g., provided or generated, based on usage trends or other suitable metrics) for the size of the pool of the plurality of application engine modules 106. If the number of reservable application engine modules decreases below the pre-determined threshold, the application engine scaler module 138 may add new application engine modules to the plurality of application engine modules 106 to increase the number of reservable application engine modules above the pre-determined threshold. If the increase in the number of reservable application engine modules becomes too great (e.g., above a second predetermined threshold), the application engine scaler module 138 may either do nothing or may remove or otherwise deallocate the excess application engine modules that are not needed from the plurality of application engine modules 106.Additionally or alternatively, suitable machine learning / artificial intelligence techniques can be used by or in conjunction with the application engine scaler module 138 to appropriately and dynamically scale the number of reservable application engine modules in the plurality of application engine modules 106. For example, a machine learning model can be trained based on usage data from users (e.g., usage trends, peak usage, off-peak usage, etc.). The machine learning model can then be used to dynamically add and remove / de-allocate application engine modules in the plurality of application engine modules 106. The machine learning model can be updated or otherwise adapted as the usage data evolves over time.
[0026] In some implementations of the invention, multiple application engine modules 106 may be associated with or otherwise correspond to and communicate with one or more application engine module pools, which may be managed, for example, by application engine inventory and reservation module 136 and / or application engine scalar module 138. For example, application engine modules for each or any emulated client device supported by cloud-based client application platform 100 may be maintained in a single large-scale application engine module pool. Application engine modules for active sessions requested by a user may be allocated, reserved, and instantiated from such a single application engine module pool, for example, by application engine inventory and reservation module 136 and / or application engine scalar module 138. However, accessing and instantiating each application engine module from such a single large-scale application engine module pool may create potential bottlenecks. For example, this may take a substantial amount of time and computing resources to spin up each application engine module separately, especially when there may be tens of thousands, hundreds of thousands, or even millions of users for which a corresponding application engine module is instantiated for cloud-based client application platform 100 at any given time. The resulting allocation delays may adversely affect the performance of and user interaction with cloud-based client application platform 100, which may result in user dissatisfaction and even user churn.
[0027] FIG. 2 is a block diagram illustrating an exemplary cloud-based client application platform 200 with multiple application engine module pools for remotely interacting with cloud-based client applications, according to an embodiment of the present disclosure. In some implementations of the present invention, each or any of the multiple application engine modules 206 may be associated with and communicate with a separate application engine module pool, which may be maintained, for example, by the application engine inventory and reservation module 136 and / or the application engine scaler module 138, with each application engine module pool supporting an individual type of application engine module or a set of related types of application engine modules. The multiple application engine modules 206 may operate in a manner similar to that discussed and described with respect to the multiple application engine modules 106 in FIG. 1. In the embodiment illustrated in FIG. 2, each cloud-based client application may have or be associated with its own individual application engine module pool. For example, each pool of the multiple application engine module pools may be configured to support a single cloud-based client application, such that each pool of the multiple application engine module pools may be allocated on a per-cloud-based client application basis. For illustrative purposes, but not by way of limitation, a Klondike Solitaire mobile game designed to run on an Android smartphone may be supported by a first application engine module 108, which may be associated with a first application engine module pool 205 of the first application engine module.A Klondike Solitaire PC game designed to run on a PC laptop can be supported by a second application engine module 114, which can be associated with a second application engine module pool 210 of the second application engine module. A Klondike Solitaire mobile game designed to run on an iOS smartphone can be supported by a third application engine module 120, which can be associated with a third application engine module pool 215 of the third application engine module. A Klondike Solitaire game designed to run on a game console can be supported by an Nth application engine module 126, which can be associated with an Nth application engine module pool 220 of the Nth application engine module, etc. Alternatively, each pool of the multiple application engine module pools can be configured to support a set of related application engine modules (e.g., an application engine module that emulates an Android smartphone with a particular operating system version, etc.), such that each pool of the multiple application engine module pools can be allocated on a per application engine module type basis. Any suitable number of application engine module pools can be maintained and supported for any suitable number of application engine modules, e.g., by application engine inventory and reservation module 136 and / or application engine scaler module 138, depending on, e.g., the number of cloud-based client applications (or, alternatively, application engine module types) supported by the system or any suitable subset thereof.
[0028] In some implementations of the present invention, each or any of the application engine modules in each of the multiple application engine module pools can be "pre-warmed." For example, the application engine modules in each of the multiple application engine module pools can be pre-allocated and pre-instantiated in the application engine module pool and then placed in standby or sleep mode, for example, by the application engine inventory and reservation module 136 and / or the application engine scaler module 138. By spinning up the application engine modules in each application engine module pool in the background and maintaining those spun-up application engine modules in standby mode, the application engine modules can be immediately (or near immediately) reserved and assigned to users in response to active session demands with little or no associated delay, since waking up an application engine module that is in standby mode may take substantially less time than instantiating the application engine module from scratch. Once an application engine module in an application engine module pool has been reserved and assigned, it can be immediately (or near-immediately) replaced by another "pre-warmed" application engine module from the corresponding application engine module pool so that the reserved and assigned application engine module can be ready for immediate (or near-immediate) reservation and assignment by the next user requesting an active session. Such a "pre-warmed" replacement process can continue as each application engine module in the application engine module pool is reserved and assigned.In such a manner, application engine modules from each of the multiple application engine module pools can be allocated to users in real-time. In this disclosure, "real-time" can refer to processing that can occur instantaneously or within a short period of time (e.g., a few seconds) such that there is minimal delay between when a request is received and when the request is processed and a response is provided. Computing resources allocated to an application engine module reserved for an active session can be immediately (or nearly immediately) deleted or otherwise deallocated once the active session ends and the reserved application engine module is no longer needed for that active session. In some implementations of the present invention, such freed computing resources can be reallocated, for example, by application engine inventory and reservation module 136 and / or application engine scaler module 138 to add and pre-warm another application engine module in the associated application engine module pool or a different application engine module pool, rather than maintaining computing resources for a reserved application engine module that is no longer needed for an inactive session.
[0029] The size of each or any of the multiple application engine module pools can be fixed or dynamic. For example, the size of the application engine module pool can be fixed such that a predetermined application engine module pool size number of pre-warmed application engine modules can be maintained within the pool. As pre-warmed application engine modules in the application engine module pool are allocated, the application engine inventory and reservation module 136 and / or the application engine scaler module 138 can replace the allocated application engine modules with additional pre-warmed application engine modules to maintain the size of the application engine module pool at or near the predetermined application engine module pool size number. The predetermined application engine module pool size number can be based, for example, on usage trends, historical usage information, or other suitable metrics and the like for the particular application engine module. Thus, a highly used application engine module can have a larger predetermined application engine module pool size number, while a less used application engine module can have a smaller predetermined application engine module pool size number.
[0030] Additionally or alternatively, the size of the application engine module pool can be dynamic. In some implementations of the present invention, the application engine inventory and reservation module 136 and / or the application engine scalar module 138 can monitor the usage trends of each or any of the multiple application engine modules 206 in real time. For example, as the usage trends increase for a particular application engine module, the application engine scalar module 138 can increase the size of the associated application engine module pool (and thus the number of pre-warmed application engine modules maintained in the application engine module pool) to accommodate more usage so that application engine module allocation can continue in real time without added delays. Conversely, as the usage trends decrease for a particular application engine module, the application engine scalar module 138 can decrease the size of the associated application engine module pool (and thus the number of pre-warmed application engine modules maintained in the application engine module pool) to accommodate less usage so that computing resources are not unnecessarily overworked and can be allocated elsewhere. In such embodiments, the size of each or any of the application engine module pools can be dynamically modified to accommodate increased usage (e.g., spikes in usage) and periods of lulls in usage and maintain real-time allocation of application engine modules.
[0031] In some implementations of the invention, the application engine inventory and reservation module 136 and / or the application engine scalar module 138 may include suitable predictive models or use suitable machine learning / artificial intelligence techniques to determine application engine module pool sizes for a plurality of application engine module pools. For example, a machine learning model may be trained for each supported application engine module based on usage trend data to modify the application engine module pool size for the application engine module, minimize the amount of time to allocate the application engine module, and maintain a reduced allocation time for real-time application engine module allocation. The machine learning model may then be used to dynamically and appropriately modify the size of the application engine module pool associated with the application engine module based on the usage experienced at a particular time for that application engine module. The machine learning model may be updated or otherwise adapted as usage trends for the application engine module change and evolve over time, for example, as monitored by the application engine inventory and reservation module 136 and / or the application engine scalar module 138. In some implementations of the invention, the size of each application engine module pool in a subset of the plurality of application engine module pools may be fixed, while the sizes of other application engine module pools in the plurality of application engine module pools may be dynamic. For example, highly used application engine modules may be associated with application engine module pools whose sizes are dynamic, while less used application engine modules may be associated with application engine module pools whose sizes are fixed.Additionally or alternatively, the size of a particular application instance module pool can be fixed at some times and dynamic at other times. For example, for application engine modules that generally experience lower usage, the size of the corresponding application engine module pool can be fixed. However, during (e.g., intermittent) periods of higher usage (e.g., usage spikes), the size of the corresponding application engine module pool can be dynamic. The application engine inventory and reservation module 136 and / or the application engine scalar module 138 can switch the size of the application engine module pool back to a fixed state once the period of higher usage ends. In this manner, the application engine inventory and reservation module 136 and / or the application engine scalar module 138 can adapt to changing usage conditions as needed to maintain a reduced allocation time for real-time allocation of application engine modules.
[0032] In some implementations of the invention, one or more application engine module pools may be maintained within and with the application engine modules 206, as illustrated in FIG. 2. However, in some implementations of the invention, each or any of the one or more application engine module pools may be maintained within and with an application engine module controller 104 that is outside the application engine modules 206, but within the server system 102. Additionally or alternatively, each or any of the one or more application engine module pools may be maintained within or with the server system 102, but outside the application engine module controller 104, such as, for example, in a database 146. Additionally or alternatively, each or any of the one or more application engine module pools may be maintained within or with a suitable cloud or server storage system that is remote from and in communication with the server system 102.
[0033] As illustrated in FIGS. 1 and 2, the server system 102 may include a session management controller 140 to manage active sessions. The session management controller 140 may communicate with the application engine reservation controller 134. In some implementations of the present invention, the session management controller 140 may also be coupled to or otherwise in communication with the application engine module controller 104. The session management controller 140 may include a session manager module 142 to manage the allocation of application engine modules (e.g., communicating and coordinating with the application engine inventory and reservation module 136 and the application engine scaler module 138), including registration, deregistration, and scaling. The session manager module 142 may also act as a coordinator for the server system 102 to support, for example, load balancing and latency. The session manager module 142 may receive requests from client devices and initiate active sessions. In addition, the session manager module 142 may receive session information from the client device (e.g., in addition to or as part of the request), which may be used to select an appropriate application engine module. In one embodiment, the session information received from the client device may include, for example, one or more characteristics of the cloud-based client application for which an active session is requested, one or more characteristics of the client device (e.g., client device type, operating system, etc.), and other similar characteristics or data.
[0034] The session management controller 140 may include an application engine selector module 144 that communicates with the session manager module 142. The session manager module 142 may pass received session information to the application engine selector module 144, which may use such information to select an appropriate application engine module for the requested active session. For illustrative purposes, but not by way of limitation, a user using a non-Android client device, such as a PC laptop, may request an active session with a (cloud-based) Klondike Solitaire mobile game designed to be launched on an Android smartphone. Based on the session information passed to the application engine selector module 144, the application engine selector module 144 may select an Android application engine module for the (cloud-based) Klondike Solitaire mobile game for the active session. The application engine selector module 144 may communicate with the application engine inventory and reservation module 136. As a result, the application engine selector module 144 can instruct the application engine inventory and reservation module 136 to reserve an Android® application engine module for the (cloud-based) Klondike Solitaire mobile game from multiple application engine modules 106 or 206. Once reserved, the Android® Klondike Solitaire mobile game application engine module can be bound to the requested active session such that other users cannot use the reserved application engine module during the active session.The application engine selector module 144 can issue a command (e.g., passed to the reserved Android® mobile game application engine module via the application engine inventory and reservation module 136) to start the (cloud-based) Klondike Solitaire mobile game in the Android® application engine module. Users can then begin to interact with the (cloud-based) Klondike Solitaire mobile game remotely via their PC laptop as if the Klondike Solitaire mobile game was running natively on the PC laptop itself. If the Android® Klondike Solitaire cloud-based mobile game application engine module is unavailable, the application engine inventory and reservation module 136 can instruct the application engine scaler module 138 to add and reserve the Android® Klondike Solitaire cloud-based client game application engine module to the multiple application engine modules 106 or 206 in the manner described above.
[0035] In some implementations of the invention, the session management controller 140 (e.g., the session manager module 142 and the application engine selector module 144) may coordinate with and control the application engine reservation controller 134 (e.g., the application engine inventory and reservation module 136 and the application engine scaler module 138) and manage one or more application engine module pools, as shown and discussed with respect to Figure 2. Additionally or alternatively, the session management controller 140 may directly coordinate with and control the application engine module controller 104 and manage one or more application engine module pools.
[0036] In an embodiment, the application engine reservation controller 134 may, for example, identify and maintain usage trends for the application engine modules (e.g., for each user, for all users, or for any subset thereof), so that some implementations of the present invention may also recommend cloud-based client applications to each or any user. In an embodiment, the session manager module 142 may include a recommendation engine or equivalent. The recommendation engine may receive usage trend information from the application engine reservation controller 134 and use such information to recommend different cloud-based client applications to the user. For example, the recommendation engine may recommend the most popular cloud-based client applications (e.g., overall, within a particular genre, for users using a particular type of client device, etc.), a list of the most popular cloud-based client applications at a particular time or over a range of time (e.g., the past hour, past day, past week, etc.), and the like. The recommendation engine may also recommend cloud-based client applications that are similar to or complementary to one or more cloud-based client applications with which the user has previously interacted. For example, if a user has played the cloud-based Klondike Solitaire mobile game, the recommendation engine can recommend other cloud-based games in the same or similar genre (e.g., Spider Solitaire, Tri-Peaks Solitaire, etc.) regardless of the device platform on which the game is based (as the device platform will be emulated by one of the application engine modules 106 or 206). Other recommendations are possible. Additionally or alternatively, suitable machine learning / artificial intelligence techniques can be used by the recommendation engine to dynamically provide cloud-based client application recommendations to the user.For example, a machine learning model can be trained based on usage data from users (e.g., usage trends, peak usage, off-peak usage, etc., for all users or any subset thereof). The machine learning model can then be used to dynamically recommend cloud-based client applications to the user based on the usage trends. The machine learning model can be updated or otherwise adapted as the usage data evolves over time. Such recommendations can be communicated to the client device (e.g., as a URL or other link or hyperlink in a modal window or other suitable notification or message). If the user accepts the recommendation (e.g., by selecting a URL or other link or hyperlink to the cloud-based client application), the session manager module 142 can cause the indicated application engine module to be selected and reserved in the manner described herein and initiate an active session for the user.
[0037] The server system 102 may include one or more databases 146 that may be in communication with one or more of the application engine module controller 104, the application engine reservation controller 134, and the session management controller 140. The database 146 may be cloud-based or resident in one or more physical storage systems. The database 146 may include, for example, any suitable information related to the application engine modules, management of the application engine modules, active session information, historical session information, usage trends or other metric data, cloud-based client application state data, copies of each or any cloud-based client application, input from client devices, session logs, and other similar data.
[0038] In some implementations of the invention, the cloud-based client application platform 100 or 200 may include one or more client devices 148 in communication with the server system 102 (e.g., via the Internet or other suitable network). According to an embodiment, the client device 148 may be any suitable type of device capable of launching a suitable browser or other suitable application through which a user may interact (e.g., via a touch screen or pointing device such as a mouse, stylus, or the like), such as, for example, a smartphone, tablet, laptop, desktop computer, game console, smart television, smart watch, or any other suitable device capable of supporting such user input and interaction through a browser or other suitable application. In an embodiment, the invention may support interaction with any suitable type of cloud-based client application on any suitable number of client devices 148, each running any suitable type of operating system, independent of the underlying hardware and device characteristics of the client device 148.
[0039] The cloud-based client application may be any suitable client application that is configured to run natively on any suitable type of client device 148 according to an embodiment of the present invention, but may be executed and rendered remotely in the cloud within an application engine module of the multiple application engine modules 106 or 206 of the server system 102. For example, a cloud-based client application, such as a cloud-based mobile game or other web-based or suitable cloud-based client application, may be provided remotely as an end-user client application with which a user may interact via the server system 102. The cloud-based client application may relate to and / or provide a wide variety of functions and information including, for example, entertainment (e.g., games, music, video, etc.), business (e.g., word processing, accounting, spreadsheets, etc.), news, weather, financing, sports, etc. In an embodiment, the cloud-based client application may provide a digital game, such as a mobile digital game, a PC game, or a console game. The digital game may be or include, for example, a sports game, an adventure game, a virtual playing card game, a virtual board game, a puzzle game, a racing game, or any other suitable type of digital game. In some embodiments, the digital game can be an asynchronous competitive skills-based game in which players can each compete against others in the digital game, but do not have to play the digital game at the same time. In alternative embodiments, the digital game can be a synchronous competitive skills-based game in which players can play the digital game at the same time and compete against each other in the digital game in real time. Other suitable cloud-based digital games are also possible, whether mobile-based, PC-based, console-based, or otherwise.With respect to a cloud-based client application in which two or more users may compete against or otherwise engage with one another, each user may interact with the cloud-based client application within a separate reserved, assigned application engine module and compete, play, or otherwise engage or interact with one another using a separate application engine module and back-end architecture supported by the cloud-based client application (e.g., in the context of a digital game, a game server and the like). Additionally or alternatively, one or more users interacting with the cloud-based client application within a separate reserved, assigned application engine module may compete, play, or otherwise engage or interact with a user interacting with a client application installed and executed natively directly on that client device (i.e., without the use of an application engine module). As a result, embodiments of the present invention may enable users to interact with one another across a wide variety of different computing platforms, independent of the underlying client device 148 and operating platform used by each or any user for that client device 148.
[0040] The client device 148 may include a browser module 150. The browser module 150 may support any suitable type of browser application, such as, for example, Google Chrome, Mozilla Firefox, MICROSOFT Edge, Apple Safari, DuckDuckGo, Opera, Brave, Vivaldi, Firefox Focus, a proprietary browser, or the like. Additionally or alternatively, the browser module 150 may be a suitable application capable of supporting local rendering of video / audio information streamed (e.g., via OpenGL or the like) from a cloud-based client application to the client device 148. In an embodiment, the browser module 150 may include a display module 152, an interaction capture module 154, and a session information module 156, which communicate with each other. The display module 152 may support display of video and / or audio information streamed from a cloud-based client application running in a corresponding application engine module executing on the server system 102. In one embodiment, the video / audio output of the cloud-based client application running in the application engine module can be streamed in real time over the Internet (or other suitable network) to a browser module 150 on the client device 148 and displayed to a user via a display module 152. The display module 152 can receive the streamed video / audio output from the application engine module via the video / audio communication module 132 and render it appropriately on a display screen of the client device 148. A user can interact with the video / audio stream of the cloud-based client application in real time.In some implementations of the invention, the user's input may be collected by the interaction capture module 154 and communicated (via the Internet or other suitable network) via one or more signaling communication modules 158 (e.g., suitable data and signaling channels such as a gRPC gateway or equivalent) to an application engine module within the multiple application engine modules 106 or 206 that is assigned to the user's active session. The user's input may then be mapped to video / audio streams by a state module of the assigned application engine module, enabling the user to (remotely) control and interact with the cloud-based client application in real time as if the cloud-based client application was running natively on the client device 148.
[0041] In an embodiment, the display module 152 can also provide a display of any or all cloud-based client applications that are available for use by the user (e.g., as URLs or other links or hyperlinks in a browser application, as linked icons on a desktop in a user interface of the client device 148, etc.). The interaction capture module 154 can capture the user's selection of a desired cloud-based client application (e.g., by the user clicking or otherwise selecting one of the displayed URLs, links, hyperlinks, or icons). Once the user has selected the desired cloud-based client application, the session information module 156 can initiate an active session by communicating a request to the session management controller 140 (e.g., via a REST call or equivalent). The session management controller 140 can then initiate the process of reserving an appropriate application engine module for the active session, as described above. The session information module 156 can periodically poll the session management controller 140 (e.g., via REST or equivalent) until an application engine module is reserved and assigned for the active session. Alternatively, the session management controller 140 can transmit a suitable message or notification to the session information module 156 once an application engine module has been reserved and assigned for an active session. Once an application engine module has been reserved and assigned to a user's active session, the display module 152 on the client device 148 can connect to the reserved application engine module over a media (video / audio) channel (e.g., via the video / audio communication module 132) and begin receiving streamed video / audio media data from the cloud-based client application.As the user interacts with the video / audio media data being streamed from the cloud-based client application running in the subscribed application engine module, the interaction capture module 154 can provide captured user input to the subscribed application engine module via the signaling communication module 158 (e.g., via webRTC signaling, OpenGL, or other suitable techniques) to enable the user to (remotely) control and interact with the cloud-based client application.
[0042] FIG. 3 is a block diagram illustrating an exemplary cloud-based client application platform 300 with a plurality of application engine module pools and a plurality of application instance pools for remotely interacting with cloud-based client applications according to an embodiment of the present disclosure. As described above, each of the application engine modules in the plurality of application engine modules 206 can be configured to emulate a particular type and configuration of client device to execute the cloud-based client application. Additionally or alternatively, the server system 102 can support cloud-based client application instances (also referred to as "application instances") that can be designed and configured to run natively in the cloud on the server system 102. Thus, an application instance can be an instance of a cloud-based client application that can be configured to run natively on the server system 302 without using an application engine module from the plurality of application engine modules 206 (or 106). Thus, the server system 102 can include a module controller 304, which can operate in a manner similar to that discussed and described with respect to the application engine module controller 104 of FIGS. 1 and 2. The module controller 304 includes multiple application engine modules 206 that can support and emulate any suitable type of client device and execute any suitable type of cloud-based client application (such as those discussed and illustrated with respect to FIGS. 1 and 2 ) and multiple application instance modules 310 that can support and execute any suitable type of application instance that may run natively on the server system 102.The module controller 304 may enable application instance module registration / deregistration, atomic reservation of application instance modules, query of application instance modules, and the like, in a manner similar to that described with respect to the multiple application engine modules 206 (and 106). The multiple application instance modules 310 may include a first application instance module 312, ..., and an Mth application instance module 320, where M may be any suitable natural number and may vary over time. Each application instance module 312, ..., 320 may include a video / audio module to manage video and / or audio media data generated by the application instance and transmit such video and / or audio media data to a client device for display to a user. Each application instance module 312, ..., 320 may also include a state module to receive and process input from the client device 148 (e.g., mapping input to video / audio streams, etc.) generated while a user (remotely) interacts with the application instance. Each state module may also maintain the state of the application instance. For example, the first application instance module 312 may include a first video / audio module 314 in communication with a first state module 316. The Mth application instance module 320 may include an Mth video / audio module 322 in communication with an Mth state module 324. The module controller 304 may maintain any suitable number of application instance modules and may register (i.e., instantiate, allocate, or otherwise create) or deregister (i.e., delete or deallocate) application instance modules as needed.In an embodiment, the server system 102 may include multiple module controllers 304, each managing a respective plurality of application engine modules 206 to form an application engine module cluster and a respective plurality of application instance modules 310 to form an application instance module cluster. The server system 102 and module controllers 304 may support any suitable number and combination of application engine modules and application instance modules.
[0043] As illustrated in FIG. 3, the server system 102 may include a reservation controller 328 in communication with the module controller 304, which may operate in a manner similar to that discussed and described with respect to the application engine reservation controller 134 of FIGS. 1 and 2. In an embodiment, the reservation controller 134 may also control various aspects of the multiple application instance modules 310, including, for example, coordinating application instance module scaling, controlling application instance module access, managing application instance module initialization for users, and the like. The reservation controller 328 may include an inventory and reservation module 330, which may operate in a manner similar to that discussed and described with respect to the application engine inventory and reservation module 136 of FIGS. 1 and 2. The inventory and reservation module 330 may also track and manage an inventory of all application instance modules in the multiple application instance modules 310. The inventory and reservation module 330 may grant application instance module reservations for use in active sessions. In some implementations of the invention, when a user requests to initiate an active session with an application instance module, the inventory and reservation module 330 can reserve an appropriate application instance module, populate or cause the application instance module to be populated with appropriate user and / or application data (e.g., user profile information, user account information, application instance state data, etc. to support user interaction and engagement with the application instance), and bind the reserved application instance module to the active session.If an application instance module is not available for the active session, the inventory and reservation module 330 can instruct the module controller 304 (e.g., via the scalar module 332, discussed below) to add and register a new application instance module for use in the requested active session. In some implementations of the invention, the registration process can be performed asynchronously. For example, the inventory and reservation module 330 can wait for a new application instance module to be added and reserved by periodically polling the module controller 304 or receiving an appropriate message from the module controller 304 once the task is completed. Once an application instance module is registered, it can be reserved for and bound to the active session. In some implementations of the invention, an application instance module that is reserved for an active session can be accessible only to the user that requested it and only for the lifetime of the active session. In other words, an application instance module that is reserved for a particular active session cannot be used or accessed by another user during that active session. In some implementations of the invention, data stored in or otherwise used by a reserved application instance module during an active session may be temporary. For example, the application instance module may be deregistered at the end of an active session. Thus, any data stored or otherwise used by the application instance module during that active session may be deleted, for example, until deregistration of the application instance module.In alternative embodiments, data stored in or otherwise used by a reserved application instance module during an active session can be stored (e.g., in database 146), retrieved, and used by the user in and with subsequent active sessions. Once an application instance module is deregistered, it can be reused for another active session, or its computing resources can be reallocated to a different application instance module.
[0044] In an embodiment, the reservation controller 328 can include a scalar module 332 in communication with the inventory and reservation module 330, which can operate in a manner similar to that discussed and described with respect to the application engine scalar module 138 of FIGS. 1 and 2. The scalar module 332 can also respond to inventory and reservation changes by adding and instantiating new application instance modules to the plurality of application instance modules 310. The scalar module 332 can proactively scale the number of application instance modules in the plurality of application instance modules 310 based on, for example, usage trends or other suitable metrics, to maintain a sufficiently sized pool of reservable application instance modules. For example, the scalar module 332 can store a pre-determined threshold (e.g., provided or generated based on, for example, usage trends or other suitable metrics) for the size of the pool of the plurality of application instance modules 310. If the number of reservable application instance modules decreases below a predetermined threshold, the scalar module 332 can add new application instance modules to the plurality of application instance modules 310 to increase the number of reservable application instance modules above the predetermined threshold. If the increase in the number of reservable application instance modules becomes too great (e.g., above a second predetermined threshold), the scalar module 332 can either do nothing or remove or otherwise deallocate excess application instance modules that are not needed from the plurality of application instance modules 310. Additionally or alternatively, suitable machine learning / artificial intelligence techniques can be used by or in conjunction with the scalar module 332 to appropriately and dynamically scale the number of reservable application instance modules in the plurality of application instance modules 310.For example, a machine learning model can be trained based on usage data from users (e.g., usage trends, peak usage, off-peak usage, etc.). The machine learning model can then be used to dynamically add and remove / de-allocate application instance modules within the plurality of application instance modules 310. The machine learning model can be updated or otherwise adapted as the usage data evolves over time.
[0045] In some implementations of the invention, each or any of the multiple application instance modules 310 may be associated with and communicate with a separate application instance module pool, which may be maintained, for example, by the inventory and reservation module 330 and / or the scaler module 332, with each application instance module pool supporting an individual type of application instance module or a set of application instance modules of related types. In such embodiments, each application instance may have or be associated with its own individual application instance module pool. For example, each pool of the multiple application instance module pools may be configured to support a single cloud-based client application, such that each pool of the multiple application instance module pools may be allocated on a per application instance basis. For illustrative purposes, but not by way of limitation, a Klondike Solitaire game, designed to be natively launched on the server system 102, may be supported by a first application instance module 312, which may be associated with a first application instance module pool 318 of the first application instance module. A bingo game, designed to be natively run on server system 102, may be supported by an Nth application instance module 320, which may be associated with an Nth application instance module pool 326 of the Nth application instance module, etc. Any suitable number of application instance module pools may be maintained and supported for any suitable number of application instance modules, e.g., by inventory and reservation module 330 and / or scaler module 332, depending on, e.g., the number of application instances supported by the system or any suitable subset thereof.
[0046] In some implementations of the present invention, each or any of the application instance modules in each of the multiple application instance module pools can be "pre-warmed." For example, the application instance modules in each of the multiple application instance module pools can be pre-allocated and pre-instantiated in the application instance module pool and then placed in standby or sleep mode, for example, by the inventory and reservation module 330 and / or the scaler module 332. By spinning up the application instance modules in each application instance module pool in the background and maintaining those spun-up application instance modules in standby mode, the application instance modules can be immediately (or near immediately) reserved and assigned to users in response to active session demands with little or no associated delay, since waking up an application instance module that is in standby mode may take substantially less time than instantiating the application instance module from scratch. Once an application instance module in an application instance module pool has been reserved and assigned, it can be immediately (or near-immediately) replaced by another "pre-warmed" application instance module from the corresponding application instance module pool so that the reserved and assigned application instance module can be ready for immediate (or near-immediate) reservation and assignment by the next user requesting an active session. Such a "pre-warmed" replacement process can continue as each application instance module in the application instance module pool is reserved and assigned.In such a manner, application instance modules from each of the multiple application instance module pools can be allocated to users in real time. Computing resources allocated to an application instance module reserved for an active session can be immediately (or nearly immediately) deleted or otherwise deallocated once the active session has ended and the reserved application instance module is no longer needed for that active session. In some implementations of the invention, such freed computing resources can be reallocated, for example, by the inventory and reservation module 330 and / or the scaler module 332 to add and pre-warm another application instance module in the associated application instance module pool or a different application instance module pool, rather than maintaining computing resources for a reserved application instance module that is no longer needed for an inactive session.
[0047] The size of each or any of the multiple application instance module pools can be fixed or dynamic. For example, the size of the application instance module pool can be fixed such that a predetermined application instance module pool size number of pre-warmed application instance modules can be maintained within the pool. As pre-warmed application instance modules within the application instance module pool are allocated, the inventory and reservation module 330 and / or the scaler module 332 can replace the allocated application instance modules with additional pre-warmed application instance modules to maintain the size of the application instance module pool at or near the predetermined application instance module pool size number. The predetermined application instance module pool size number can be based, for example, on usage trends or other historical usage information for the particular application instance module, and the like. Thus, a highly used application instance module can have a larger predetermined application instance module pool size number, while a less used application instance module can have a smaller predetermined application instance pool size number.
[0048] Additionally or alternatively, the size of the application instance module pool can be dynamic. In some implementations of the invention, the inventory and reservation module 330 and / or the scalar module 332 can monitor the usage trends of each or any of the multiple application instance modules 310 in real time. For example, as the usage trends increase for a particular application instance module, the scalar module 332 can increase the size of the associated application instance module pool (and thus the number of pre-warmed application instance modules maintained in the application instance module pool) to accommodate more usage so that application instance module allocation can continue in real time without added delays. Conversely, as the usage trends decrease for a particular application instance module, the scalar module 332 can decrease the size of the associated application instance module pool (and thus the number of pre-warmed application instance modules maintained in the application instance module pool) to accommodate less usage so that computing resources are not unnecessarily overworked and can be allocated elsewhere. In such embodiments, the size of each or any of the application instance module pools can be dynamically modified to accommodate increased usage (e.g., spikes in usage) and periods of lulls in usage and maintain real-time allocation of application instance modules.
[0049] In some implementations of the invention, the inventory and reservation module 330 and / or the scaler module 332 may include suitable predictive models or use suitable machine learning / artificial intelligence techniques to determine application instance module pool sizes for the multiple application instance module pools. For example, a machine learning model may be trained for each supported application instance module based on usage trend data to modify application instance module pool sizes for the application instance modules, minimize the amount of time to allocate the application instance module, and maintain reduced allocation times for real-time application instance module allocations. The machine learning model may then be used to dynamically and appropriately modify the size of the application instance module pool associated with the application instance module based on the usage exhibited at a particular time for that application instance module. The machine learning model may be updated or otherwise adapted as usage trends for the application instance module change and evolve over time, for example, as monitored by the inventory and reservation module 330 and / or the scaler module 332. In some implementations of the invention, the size of each application instance module pool in a subset of the multiple application instance module pools may be fixed, while the size of other application instance module pools in the multiple application instance module pools may be dynamic. For example, a highly used application instance module may be associated with an application instance module pool whose size is dynamic, while a less used application instance module may be associated with an application instance module pool whose size is fixed.Additionally or alternatively, the size of a particular application instance module pool can be fixed at some times and dynamic at other times. For example, for application instance modules that generally experience lower usage, the size of the corresponding application instance module pool can be fixed. However, during (e.g., intermittent) periods of higher usage (e.g., usage spikes), the size of the corresponding application instance module pool can be dynamic. The inventory and reservation module 330 and / or the scaler module 332 can switch the size of the application instance module pool back to a fixed state once the period of higher usage ends. In this manner, the inventory and reservation module 330 and / or the scaler module 332 can adapt to changing usage conditions as needed to maintain a reduced allocation time for real-time allocation of application instance modules.
[0050] In some implementations of the invention, one or more application instance module pools may be maintained within and with the application instance modules 310, as illustrated in FIG. 3. However, in some implementations of the invention, each or any of the one or more application instance module pools may be maintained within and with a module controller 304 that is outside the application instance modules 310 but within the server system 102. Additionally or alternatively, each or any of the one or more application instance module pools may be maintained within or with the server system 102 but outside the module controller 304, such as, for example, in a database 146. Additionally or alternatively, each or any of the one or more application instance module pools may be maintained within or with a suitable cloud or server storage system that is remote from and in communication with the server system 102.
[0051] In some implementations of the invention, the reserved and assigned application engine modules and / or reserved and assigned application instance modules can each be associated with a different unique module identification (ID) number or other suitable identifier (e.g., consisting of numeric or alphanumeric characters or the like) that uniquely identifies the reserved and assigned application engine module and / or reserved and assigned application instance module during an active session. The module ID number can be used, for example, by the session management controller 140 to track and manage the reserved and assigned application engine module and / or reserved and assigned application instance module during an active session, to ensure that communications from the client device 148 are addressed and forwarded to the correct application engine module or application instance module and vice versa during an active session, and the like. In an embodiment, once an active session is completed, the session information module 156 can send an appropriate message to the session management controller 140 so that the session management controller 140 can disconnect from the active session and de-register the application engine module or application instance module used during the active session. In some implementations of the invention, any data stored or otherwise used by a registered application engine module or a registered application instance module during its active session may be deleted upon deregistration of the application engine module or application instance module.In alternative embodiments, data stored in or otherwise used by a reserved application engine module or a reserved application instance module during an active session can be stored (e.g., in database 146), retrieved, and used by the user in a subsequent active session. Once an application engine module or application instance module is deregistered, it can be reused for another active session, or its computing resources can be reallocated to a different application engine module or application instance module.
[0052] In some implementations of the present invention, a cloud-based client application (executing in either the application engine module or the application instance module) can be paused during an active session. For example, a user can pause the cloud-based client application (e.g., by pressing a suitable "pause" button displayed to the user in or with the browser application) at any particular or desired location, point, or time during an active session with the cloud-based client application. Additionally or alternatively, a cloud-based client application can be paused if a connection between the browser module 150 and the server system 102 is interrupted or lost during an active session. Additionally or alternatively, a cloud-based client application can be paused if a user terminates an active session (e.g., by pressing a browser "back" button or closing the browser application). In some implementations of the present invention, one or more suitable cookies can be stored on the client device 148 (e.g., in or associated with the browser module 150), which can be checked to determine whether any active sessions exist for the user. Such information can be communicated to the session management controller 140 via the session information module 156. The user's interaction with the cloud-based client application can be resumed at the point where it was paused once the connection is re-established or the user returns to the active session (e.g., by pressing a suitable "play" button, pressing a "call forward" button displayed to the user in or with the browser, or by reopening the browser application).In an embodiment, an active session can be kept open or otherwise maintained for a predetermined period of time (e.g., one hour, two hours, one day, etc.) while the active session is paused or when a user exits or disconnects from the active session. After the predetermined period of time expires, the active session can be terminated and the application engine module or application instance module can be deregistered. If the user desires to continue the active session before the expiration of the predetermined period of time, the user can, for example, press a "play" button, refresh a web page within a browser application, or select the same URL, link, or hyperlink used to initiate the original active session and rejoin the previously assigned and reserved application engine module or application instance module. In some implementations of the present invention, an active session can be kept open or otherwise maintained indefinitely until the user exits or otherwise terminates the active session.
[0053] By maintaining the state of the reserved application engine module or reserved application instance module and the cloud-based client application during such suspension, some implementations of the present invention may enable a user to start an active session on one client device 148, pause the active session at a particular or desired location, point, or time, and then continue the active session from the paused location, point, or time on one or more other (different) client devices 148. For illustrative purposes, but not by way of limitation, a user may request that an active session be started on a first client device 148 (e.g., a smartphone). The user may then pause the active session (e.g., by closing a browser application on the smartphone) at a particular or desired location, point, or time. The state of the cloud-based client application may be saved in a state module of the application engine module or application instance module that is assigned and registered for that active session. The user may then switch to a second client device 148 (e.g., a desktop computer) and select (through a display module 152 in a browser module 150 that launches on the second client device 148) the same URL, link, or hyperlink that was used to initiate the original active session on the first client device 148. Such an action may cause the active session to be resumed within the browser module 150 of the second client device 148. Thus, the user may be presented with the same digital page of the active session of the cloud-based client application that was paused at the same location, point, or time from the first client device 148.The user can continue to seamlessly interact with the same cloud-based client application via the second client device 148 from the paused location, point, or time in the same or similar manner as if the user continued to interact with the cloud-based client application on the first client device 148 (e.g., by pressing an appropriate “play” button in a browser application). To support such platform switching, the session management controller 140 can maintain a user ID or other suitable identifier that uniquely identifies the user in addition to the module ID. Using both the user ID and the module ID in combination with the cloud-based client application selection from the user (received from the second client device 148) and the saved state of the cloud-based client application, the session management controller 140 can identify and reassign the correct (paused) application engine module or application instance module to the second client device 148, and enable the user to continue the active session on the second client device 148 from the same location, point, or time that was paused on the first client device 148. In an alternative embodiment, if the user selects the same cloud-based client application from the same URL, link, or hyperlink on the second client device 148, the user may be presented with the option to either continue the same active session of the cloud-based client application from the same paused location, point, or time, or to start a new active session with the cloud-based client application.
[0054] In the event of a power outage or a crash of an application engine module or application instance module during an active session, the session management controller 140 can reserve a new application engine module or a new application instance module (depending on the one that was used for the active session before the power outage or crash) and assign it to the user. The cloud-based client application launching within the application engine module or application instance module can be populated with information from the previous active session (e.g., using the cloud-based client application state and other session information retrieved from the database 146) and can reflect the state of the cloud-based client application at the time immediately prior to the power outage or crash, such that the active session appears to the user as simply paused. The user can then return and re-engage with the active session in the manner described above.
[0055] In some implementations of the present invention, the session management controller 140 (e.g., via the session manager module 142) may operate in conjunction with the browser module 150 (e.g., via one or both of the display module 152 or the interaction capture module 154) to measure and monitor network latency information or other suitable characteristics of communications between the client device 148 and the server system 102 during an active session and communicate such network latency information to the session management controller 140 (e.g., via the session information module 156). The network latency information may be used by the session management controller 140 to temporarily suspend an active session if the network latency exceeds a certain threshold (e.g., based on network latency trends, usage trends, etc.), either predetermined or dynamic, and then resume the active session once the network latency falls below the threshold. Additionally or alternatively, the network latency information may be used by the server system 102 (e.g., via the video / audio communication module 132) for network connection quality management. For example, the video / audio communication module 132 can use the network latency information to determine the network connection quality to the client device 148. If the network connection quality falls below a predetermined or dynamic threshold (e.g., based on network latency trends, usage trends, etc.), the video / audio communication module 132 can modify the quality and / or characteristics of the video / audio media data being streamed to the client device 148.For example, if the network connection quality falls below a threshold, the video / audio communication module 132 may reduce the frame rate, reduce the resolution, and the like, of the streamed video / audio media data to maintain smooth display and interaction for the cloud-based client application on the client device 148 during the active session such that the active session does not need to be paused or otherwise interrupted (e.g., in the context of a cloud-based mobile game, to maintain smooth gameplay on the client device 148). The video / audio communication module 132 may periodically or persistently update the quality and / or characteristics of the stream of video / audio media data throughout the active session (e.g., reduce and / or increase the frame rate, resolution, etc. of the video / audio media data stream as the network connection quality varies over the course of the active session). As a result, the server system 102 may use the network latency information to determine, vary, and control the video / audio streaming quality to the client device 148 to maintain smooth display and interaction for the cloud-based client application for the user.
[0056] Additionally or alternatively, the network latency information can be used by the session management controller 140 to determine and select an appropriate application engine module or application instance module for a user. For example, in some implementations of the present invention, the server system 102 can include multiple application engine module controllers 104, each managing a respective plurality of application engine modules 106 to form one or more application engine module clusters, as illustrated and discussed with respect to Figures 1 and 2. In some implementations of the present invention, the server system 102 can include multiple module controllers 304, each managing a respective plurality of application engine modules 206 to form one or more application engine module clusters, and / or managing a respective plurality of application instance modules 310 to form one or more application instance module clusters, as illustrated and discussed with respect to Figure 3. The application engine module clusters and / or application instance module clusters can be geographically distributed such that the respective plurality of application engine modules 106 or 206 and / or the respective plurality of application instance modules 310 can each be located in different geographic locations. When a user requests an active session with a cloud-based client application, the network latency information can be used by the session management controller 140 to reserve and assign to the user's client device 148 an application engine module or application instance module that is geographically closest or otherwise has the least network latency.By measuring and monitoring network latency information for all client devices 148, the server system 102 can generate a heat map or equivalent of network latency throughout the cloud-based client application platform 100, 200, or 300 that can be used to reserve and assign to each user the optimal application engine module or optimal application instance module (e.g., that is optimal in terms of network latency or network connection quality) to maintain a smooth display and interaction for the cloud-based client application on the client device 148 during an individual active session.
[0057] Because, according to embodiments, cloud-based client applications may be launched remotely within the server system 102 and displayed on any suitable client device 148, the present invention may also enable cloud-based client applications to be integrated into third party platforms, including third party websites and applications, by embedding or otherwise providing a URL or link or hyperlink to one or more cloud-based client applications within the third party platform. Such integration may enable those third parties to more easily provide different features and functionality that complement and enhance interaction and engagement with their third party platforms via the integrated cloud-based client application. For illustrative purposes, but not by way of limitation, retailers may incorporate any suitable cloud-based client application within their consumer touchpoints by embedding or otherwise providing a URL or other link or hyperlink to the cloud-based client application. For example, a retailer may incorporate a cloud-based mobile game within the retailer's website or application, according to embodiments of the present invention. A user may interact with the cloud-based mobile game within the retailer's website or application in the manner described herein as if the cloud-based mobile game were running on the user's client device. If a user wins in an integrated cloud-based mobile game, the user may be awarded prizes in the retailer's own currency (e.g., points rewards, coupons, discounts on products / services, free merchandise, etc.). Prize information may be communicated (e.g., via the server system 102) from the integrated cloud-based mobile game to a third party platform and maintained within the retailer's website or application for use by the user.For example, fast food restaurants may integrate cloud-based mobile games into their websites or applications in accordance with embodiments of the present invention. A user may select and engage with the integrated cloud-based mobile game via a website or application, for example, by selecting an appropriate built-in or otherwise provided URL or other link or hyperlink to the cloud-based mobile game and then (remotely) interacting with the cloud-based mobile game. If the user wins the integrated cloud-based mobile game, the user may be awarded a free additional order of food (or other suitable prize or offer appropriate to the retailer) that may be redeemed at the fast food restaurant. If the user loses, the user may be allowed to compete again, offered a less expensive prize, offered another opportunity to play, etc. The present invention may support the integration of any suitable type of cloud-based client application into any suitable third party platform. By enabling users to interact with cloud-based client applications that are integrated into and through the third party's website or application in accordance with the present invention, third parties may increase user engagement metrics with their platform without requiring users to download and install cloud-based client applications onto their client devices 148.
[0058] By integrating one or more cloud-based client applications into a third party platform, a distinctly different experience can be tailored for users on the third party platform that may not be available to the general population who access a non-integrated version of the cloud-based client application or who access it from a different website or application. For example, the integrated cloud-based client application on the third party platform can provide features, functionality, interface modifications, and the like that are available to users of the integrated cloud-based client application. For example, if the integrated cloud-based client application is a cloud-based mobile game, a user who interacts with the integrated cloud-based mobile game can have access to special or promotional tournaments that are not available to general users of the cloud-based mobile game. Additionally or alternatively, a user who interacts with the integrated cloud-based client application can be presented with special limited time offers (LTOs), advertisements, or other promotions that are not available to general users of the cloud-based client application. Additionally or alternatively, a user who interacts with the integrated cloud-based client application can be presented with modified or enhanced user interfaces (e.g., different screens, customizations, third party branding information, etc.) that are not available to general users of the cloud-based client application. Other modifications to the user experience of the integrated cloud-based client application to support third party platforms (including modifications to graphical user interfaces inside and / or outside the integrated cloud-based client application) are also possible.
[0059] In some implementations of the present invention, data collected from users interacting with the integrated cloud-based client application can also be used in addition to or as an alternative to tailor the user experience of the integrated cloud-based client application. In an embodiment, the features, functionality, and capabilities of the integrated cloud-based client application on the third party platform can be targeted to individual users based on third party platform user data, data from or associated with the user's client device 148, and the like. For example, the server system 102 can identify each user's geographic location via the client device 148's GPS (e.g., passed to the session management controller 140 via the session information module 156), from the user's account profile information (e.g., retrieved from the database 146), or the like. A user who accesses the integrated cloud-based client application from one geographic location (e.g., a first state or region) can be presented with a different user experience than that user who accesses the integrated cloud-based client application from a different geographic location (e.g., a different state or region). The different user experiences may include, for example, different user interfaces, different tournaments (e.g., in the context of a cloud-based mobile game), different features and functionality, and the like. For example, if the integrated cloud-based client application is a cloud-based mobile game, the user data may be used to match players for the integrated cloud-based mobile game. For example, for a competitive skill-based integrated cloud-based mobile game, the user information may be used to match users with other users who interact with the integrated cloud-based mobile game, rather than with users from the general population of the (non-integrated) cloud-based mobile game.Such player matching can help ensure fairness in competitions and / or enforce anti-fraud / anti-cheating measures, as users of integrated cloud-based mobile games may have access to features and functionality that are not available to the general population of users of (non-integrated) cloud-based mobile games.
[0060] Some implementations of the present invention can be used to integrate cloud-based client applications into online or digital advertising. For illustrative purposes, but not by way of limitation, cloud-based mobile games can be integrated into digital advertising to generate interactive advertising units, such as playable ads. In some implementations of the present invention, the integrated cloud-based mobile game can be accessed from a playable ad by having a user click on a URL, link, or hyperlink embedded or otherwise provided within the playable ad. Alternatively, the cloud-based mobile game can be automatically launched within the playable ad upon surfacing, presenting, or displaying of the playable ad to the user. Users can interact with the integrated cloud-based mobile game within and through the playable ad as part of a digital advertising campaign, and can earn, for example, prizes, promotions, and other similar rewards. In some embodiments, such rewards can be used by the cloud-based mobile game itself (e.g., virtual currency or rewards) to motivate users to interact with the playable ads. For example, users can use such rewards to make in-app purchases while interacting with the playable ads, or for other types of redemptions or purchases within the cloud-based mobile game itself. In alternative embodiments, such rewards can be used for or with another application or website associated with the digital advertising campaign to encourage user engagement. However, any suitable cloud-based client application can be integrated into the digital advertising to generate the interactive advertising unit. For example, an interactive advertising unit or other digital advertising for a cloud-based client application product can include a test version (or even a fully enabled, but time-limited version) of the cloud-based client application product that is integrated into the interactive advertising unit or other digital advertising.As a result, users can engage with and evaluate a cloud-based client application product (e.g., within and through an interactive ad unit or other digital advertisement) without having to wait to download and install it or otherwise purchase it before evaluating it.
[0061] 4 is a flow chart illustrating an example method 400 for remotely interacting with a cloud-based client application using, for example, the server system 102 of FIG. 1, according to an embodiment of the present disclosure. In block 405, the server system 102 may receive a first request from a user's client device (e.g., the client device 148) to initiate an interactive session with the cloud-based client application. The first request may include at least one characteristic of the client device. For illustrative purposes, but not limited to, the client device characteristic may be, for example, a geographic location of the client device, although other characteristics are also possible. The cloud-based client application may be configured to run on a computing platform distinct from and remote from the client device. For illustrative purposes, but not limited to, the client device may be, for example, an Android-based smartphone, while the computing platform may be, for example, a desktop PC. In block 410, the server system 102 (e.g., via the application engine inventory and reservation module 136) can reserve an application engine module from a plurality of application engine modules (e.g., a plurality of application engine modules 106) in response to the first request to execute the cloud-based client application remotely from the client device. The application engine module can be bound to a user for the duration of the interactive session. In an embodiment, each application engine module can be reserved for one user such that each application engine module can be used by at most a single (bound) user during the interactive session.At block 415, the server system 102 may modify the cloud-based client application executing in the reserved application engine module based on at least one characteristic of the client device. In an embodiment, the characteristic of the client device may be used to modify the cloud-based client application executing in the reserved application engine module. For illustrative purposes, but not by way of limitation, if the characteristic of the client device is a geographic location, the server system 102 may modify the cloud-based client application such that users in different geographic locations may experience the cloud-based client application in a manner that is tailored to their particular location or other suitable client device characteristic, and may present visual features (e.g., interface changes, time-limited offers, advertisements, etc.) that are specific to the geographic area in which the client device is located. At block 420, the server system 102 may execute the modified cloud-based client application in the reserved application engine module. At block 425, the server system 102 may stream media (e.g., video and / or audio) data from the modified cloud-based client application to a browser application or other suitable application executing on the user's client device (e.g., via the display module 152 in the browser module 150). In block 430, the server system 102 may receive interaction data (e.g., input, response, feedback, etc.) from the client device (e.g., via the interaction capture module 154) when a user interacts with the media data streamed from the cloud-based client application to be modified via a browser application on the client device 148.At block 435, the server system 102 may receive a second request from the client device (e.g., via the session information module 156 to the session management controller 140) to terminate the interactive session with the modified cloud-based client application. In an embodiment, the second request may not be a specific request from the client device to terminate the interactive session, but rather a termination of a media stream to which the client device is connected. At block 440, the server system 102 may deregister or deallocate the reserved application engine module in response to the second request (e.g., via the application engine inventory and reservation module 136). In an embodiment, the reserved application engine module may be deregistered or deallocated from the inventory and processors, and processes supporting the reserved application engine module may be spun down or otherwise terminated such that the application engine module is not reused for multiple users. In an alternative embodiment, the reserved application engine module may be disassociated from the user and made available for use by a second (or subsequent) user.
[0062] FIG. 5 is a flow chart illustrating an example method 500 for remotely interacting with a cloud-based client application using, for example, the server system 102 of FIG. 2 or FIG. 3 according to an embodiment of the present disclosure. In block 505, the server system 102 may receive a first request from a user's client device (e.g., the client device 148) to initiate an interactive session with the cloud-based client application. The cloud-based client application may be configured to run on a second client device. The second client device may comprise a computing platform that is distinct from and remote from the client device. For illustrative purposes, without limitation, the client device may be, for example, an Android®-based smartphone, while the second client device may be, for example, a desktop PC. In block 510, in response to the first request, the server system 102 may reserve an application engine module from a pre-instantiated application engine module pool of a plurality of pre-instantiated application engine module pools (e.g., via the application engine inventory and reservation module 136) to execute the cloud-based client application remotely from the client device. The reserved application engine module can be bound to the client device for the duration of the interactive session. A pre-instantiated application engine module can be added to the pre-instantiated application engine module pool to replace the reserved application engine module. In some implementations of the invention, each pre-instantiated application engine module pool of the multiple pre-instantiated application engine module pools can be associated with a different cloud-based client application.At block 515, the cloud-based client application may be executed within the reserved application engine module. At block 520, first media data may be streamed from the cloud-based client application executing within the reserved application engine module to a browser application executing on the client device (e.g., via the display module 152 of the browser module 150). At block 525, interaction data may be received from the client device upon a user engaging with the first media data streamed from the cloud-based client application via the browser application (e.g., via the interaction capture module 154). At block 530, the cloud-based client application may be modified within the reserved application engine module based on the interaction data received from the client device. At block 535, second media data may be streamed from the modified cloud-based client application to the browser application. At block 540, a second request may be received from the client device (e.g., via the session information module 156 to the session management controller 140) to terminate an interactive session with the modified cloud-based client application. In block 545, the reserved application engine module may be deallocated in response to the second request. The reserved application engine module may be disassociated from the client device. A similar process may be implemented for an application instance module, as shown and discussed with respect to FIG.
[0063] FIG. 6 is another flow chart illustrating an example method 600 for remotely interacting with a cloud-based client application. At block 602, a first request from a first client device of a user may be received to initiate an interactive session with the cloud-based client application. The cloud-based client application may be configured to execute on a second client device. It should be noted that the first client device may vary from the second client device because the second client device may comprise a computing platform different from the first client device. In aspects of the invention, the first client device may be a smartphone and the second client device may be a desktop computer. In aspects of the invention, the cloud-based client application may operate on the second client device as described herein, and media (i.e., video and / or audio) data is output from the cloud-based client application streamed to and displayed on the first client device. As noted above, the first request may include characteristics of the client device, which may correspond, for example, to a geographic location specific to the client device. For example, a geographic location may correspond to a city, a city block, a particular address, and so on.
[0064] At block 604, an application engine from a pre-instantiated application engine pool of the plurality of pre-instantiated application engine pools may be reserved for purposes of executing the cloud-based client application remotely from the first client device. As described above, such a reservation operation specifically enables linking of the cloud-based client application executing within the application engine to the first client device such that the cloud-based client application operates in conjunction with only the first client device for a predefined duration.
[0065] At block 606, interaction data from the first client device may be received as the user engages with the first media data associated with the cloud-based client application. For example, the interaction data may correspond to input, responses, feedback, etc. from the user as the user (remotely) engages with the cloud-based client application. The first media data may include video and / or audio data streamed from the cloud-based client application to the user on the first client device.
[0066] At block 608, the cloud-based client application executed within the application engine that is reserved may be modified based on the interaction data received from the first client device. As described above, in aspects, the modification may involve presenting, via the display module 152 of the first client device, one or more visual features that are updated as the user engages with the cloud-based client application. Additionally or alternatively, the visual features of the cloud-based client application can be modified based on or specific to the geographic area within which the first client device is located, or other suitable characteristics of the first client device. For example, such visual features may correspond to advertisements or offers that are related to or somewhat specific to the location of the first client device.
[0067] At block 610, a second request from the first client device may be received to terminate the interactive session with the modified cloud-based client application. For example, a user may select an icon or interact with a button on the first client device to terminate the interactive session with the cloud-based client application. Various methods of terminating the interactive session are also contemplated.
[0068] At block 612, the reserved application engine may be deallocated. The reserved application engine may be unlinked or otherwise disassociated from the first client device. For example, deallocation may involve deregistering from the application engine such that the application engine is no longer specifically linked, coupled, or otherwise associated for operation with the first client device. In other words, after deallocation, the application engine may be linked, associated, or assigned to a client device different than the first client device.
[0069] An embodiment of the present invention can improve network efficiency by not requiring users to download and install on their client devices a large number (e.g., tens, hundreds, or more) of different client applications with which they may wish to interact. Instead, the present invention can improve network traffic and network bandwidth utilization because it is the video / audio data and user input that is communicated between the server system 102 and the client devices 148, rather than the entire client application itself. In addition, the present invention can reduce computer storage requirements on both the client and server sides. For example, users would not be required to download and install any client application on and to their client devices. In some implementations of the present invention, the server system 102 can store a single version of a cloud-based client application that can be accessed from and distributed to any type of client device, instead of having to store many different versions of the client application and support many client devices.
[0070] The embodiments of the present invention may also improve the processing efficiency of the client device 148 since the client device 148 may process video / audio data from a cloud-based client application more quickly and efficiently than if the entire client application itself were to run natively on the client device. The embodiments of the present invention may also improve the processing efficiency of the server system 102. Rather than keeping computing resources running continuously to support cloud-based client applications on the server system 102, the server system 102 may allocate computing resources when application engine modules and / or application instance modules are registered for an active session and de-allocate those resources when the active session is completed. In other words, the server system 102 may register and de-register application engine modules and / or application instances, respectively, as needed, without having to continually maintain and process each cloud-based client application for each client device. As a result, the server system 102 may more effectively allocate computer processing resources to those application engine modules (and cloud-based client applications running within those application engine modules) and / or application instances that are being used and away from those application engine modules and / or application instances that are not being used. In some implementations of the present invention, pre-warming up application engine modules in an application engine module pool and / or application instances in an application instance pool can also substantially reduce the response time for establishing an active session.As a result, embodiments of the present invention can manage users in active sessions at scale to maintain instant (or near instant) start-up and interaction with cloud-based client applications (e.g., in the context of cloud-based mobile gaming, "instant play"), particularly when there are, for example, hundreds or thousands of cloud-based client applications and millions, tens of millions, or more users interacting in parallel with those cloud-based client applications.
[0071] FIG. 7 is a block diagram of an exemplary computing device 700 that may perform one or more of the operations described herein according to the present embodiment. The computing device 700 may be connected to other computing devices in a LAN, an intranet, an extranet, and / or the Internet. The computing device 700 may operate in the capacity of a server machine in a client-server network environment or in the capacity of a client in a peer-to-peer network environment. The computing device 700 may be provided by a personal computer (PC), a set-top box (STB), a server, a network router, switch or bridge, or any machine capable of executing (sequentially or otherwise) a set of instructions that define actions to be taken by the machine. Furthermore, although only a single computing device 700 is illustrated, the term "computing device" shall also be taken to include any collection of computing devices that individually or together execute a set (or sets) of instructions to perform the methods discussed herein.
[0072] The exemplary computing device 700 may include a computer processing device 702 (e.g., a general purpose processor, an ASIC, etc.), a main memory 704, a static memory 706 (e.g., a flash memory or equivalent), and a data storage device 708, which may communicate with each other via a bus 730. The computer processing device 702 may be provided by one or more general purpose processing devices, such as a microprocessor, a central processing unit, or equivalent. In an illustrative embodiment, the computer processing device 702 may comprise a complex instruction set computing (CISC) microprocessor, a reduced instruction set computing (RISC) microprocessor, a very long instruction word (VLIW) microprocessor, or a processor implementing other instruction sets or a processor implementing a combination of instruction sets. The computer processing device 702 may also comprise one or more special purpose processing devices, such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), a network processor, or equivalent. The computing device 702 may be configured to execute the operations described herein in accordance with one or more aspects of the present disclosure to perform the operations and steps discussed herein.
[0073] The computing device 700 may further include a network interface device 712, which may be in communication with a network 714. The data storage device 708 may include a machine-readable storage medium 728 on which one or more sets of instructions may be stored, such as instructions for performing operations described herein according to one or more aspects of the disclosure. The instructions 718 implementing the core logic instructions 726 may also reside, completely or at least partially, within the main memory 704 and / or the computing device 602 during execution thereof, with the computing device 700, main memory 704, and the computing device 602 also constituting computer-readable media. Instructions may further be transmitted or received via the network interface device 712 over the network 714.
[0074] Although the machine-readable storage medium 728 is shown in the illustrative embodiment as being a single medium, the term "computer-readable storage medium" should be taken to include a single medium or multiple media (e.g., centralized or distributed databases and / or associated caches and servers) that store one or more sets of instructions. The term "computer-readable storage medium" should also be taken to include any medium capable of storing, encoding, or carrying a set of instructions for execution by a machine, causing the machine to perform the methods described herein. The term "computer-readable storage medium" should thus be taken to include, but is not limited to, solid-state memory, optical media, magnetic media, and the like.
[0075] The subject matter and embodiments of the operations described in this disclosure can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this disclosure and their structural equivalents, or in a combination of one or more of them. The subject matter described in this disclosure can be implemented as one or more computer programs, i.e., one or more modules of computer program instructions encoded on a computer storage medium for execution by or to control the operation of a data processing device. Alternatively, or in addition, the program instructions can be encoded on an artificially generated propagated signal, e.g., a machine-generated electrical, optical, or electromagnetic signal that is generated to encode information for transmission to a suitable receiver device for execution by a data processing device. The computer storage medium can be, or be included in, a computer-readable storage device, a computer-readable storage substrate, a random or serial access memory array or device, or a combination of one or more of them. Also, a computer storage medium is not a propagating signal, although a computer storage medium can be a source or destination of computer program instructions encoded in an artificially generated propagating signal. A computer storage medium can also be, or be contained in, one or more separate physical components or media (e.g., multiple CDs, disks, or other storage devices).
[0076] The operations described in this disclosure may be implemented as operations performed by a data processing apparatus on data stored on one or more computer-readable storage devices or received from other sources.
[0077] The term "data processing apparatus" encompasses any kind of apparatus, device, and machine for processing data, including, as examples, a programmable processor, a computer processing device, a computer, a system on a chip, or a plurality or combination of the above. A computer processing device can include one or more processors, which may include special purpose logic circuitry, e.g., a field programmable gate array (FPGA) or an application specific integrated circuit (ASIC), a central processing unit (CPU), a multi-core processor, etc. An apparatus can also include, in addition to hardware, code that creates an execution environment for the computer program, e.g., code that constitutes a processor firmware, a protocol stack, a database management system, an operating system, a cross-platform runtime environment, a virtual machine, or a combination of one or more of these. The apparatus and execution environment can implement a variety of different computing model infrastructures, such as web services, distributed computing, and grid computing infrastructures.
[0078] A computer program (also known as a program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, declarative, procedural, or functional languages, and can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, object, or other unit suitable for use in a computing environment. A computer program may, but need not, correspond to a file in a file system. A program can be stored within part of a file that holds other programs or data (e.g., one or more scripts stored in a markup language resource), within a single file dedicated to the program, or within multiple cooperating files (e.g., files that store one or more modules, subprograms, or portions of code). A computer program can be deployed to run on one computer, or on multiple computers located at one site or distributed across multiple sites and interconnected by a communication network.
[0079] The processes and logic flows described in this disclosure may be implemented by one or more programmable processors executing one or more computer programs to perform actions by operating on input data and generating output. The processes and logic flows may also be implemented by, and apparatus may also be implemented as, special purpose logic circuitry, such as an FPGA (field programmable gate array) or an ASIC (application specific integrated circuit).
[0080] Processors suitable for executing computer programs include, by way of example, both general-purpose and special-purpose microprocessors, and any one or more processors of any kind of digital computer. In general, the processor will receive instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a processor for performing actions according to instructions, and one or more memory devices for storing instructions and data. In general, the computer will also include, or be operatively coupled to receive data from, or transfer data to, one or more mass storage devices, such as magnetic disks, magneto-optical disks, or optical disks, solid-state devices, or the like, for storing data. However, a computer need not have such devices. A computer can also be embedded in another device, such as a smartphone, a mobile audio or media player, a game console, a global positioning system (GPS) receiver, or a portable storage device (e.g., a universal serial bus (USB) flash drive), to name just a few. Suitable devices for storing computer program instructions and data include all forms of non-volatile memory, media, and memory devices, including, by way of example, semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices, magnetic disks, e.g., internal hard disks or removable disks, magneto-optical disks, and CD-ROM and DVD-ROM disks. The processor and memory can be supplemented by, or incorporated in, special purpose logic circuitry.
[0081] To provide for interaction with a user, embodiments of the subject matter described herein can be implemented on a computer having a display device, e.g., a CRT (cathode ray tube), LCD (liquid crystal display) monitor, light emitting diode (LED) monitor, or equivalent, for displaying information to the user, and a keyboard and pointing device, e.g., a mouse, trackball, touchpad, stylus, or equivalent, by which the user may provide input to the computer. Other types of devices can be used to provide interaction with the user as well, e.g., feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback, and input from the user can be received in any form, including acoustic, speech, or tactile input. Other possible input devices include touch screens or other touch-sensitive devices such as single or multi-point resistive or capacitive trackpads, voice recognition hardware and software, optical scanners, optical pointers, digital image capture devices and associated interpretation software, and equivalents. In addition, the computer can interact with a user by sending resources to and receiving resources from devices used by the user, for example, by sending a web page to a web browser on the user's client device in response to a request received from the web browser.
[0082] An embodiment of the subject matter described in this disclosure can be implemented in a computing system that includes a back-end component, e.g., as a data server, or includes a middleware component, e.g., an application server, or includes a front-end component, e.g., a client computer having a graphical user interface or web browser through which a user may interact with an implementation of the subject matter described in this disclosure, or any combination of one or more such back-end, middleware, or front-end components. The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communications network. Examples of communications networks include local area networks ("LANs") and wide area networks ("WANs"), internetworks (e.g., the Internet), peer-to-peer networks (e.g., ad-hoc peer-to-peer networks), and the like.
[0083] A computing system may include clients and servers. Clients and servers are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on respective computers and having a client-server relationship to each other. In some embodiments, a server transmits data (e.g., HTML pages) to a client device (e.g., for purposes of displaying data to a user interacting with the client device and receiving user input from the user). Data generated at the client device (e.g., results of user interaction) can be received from the client device at the server.
[0084] One or more computer systems may be configured to perform particular operations or actions by having software, firmware, hardware, or a combination thereof installed on the system that, when in operation, causes the system to perform the actions. One or more computer programs may be configured to perform particular operations or actions by containing instructions that, when executed by a data processing device, cause the device to perform the actions.
[0085] Throughout this disclosure, references to "one embodiment" or "an embodiment" mean that a particular feature, structure, or characteristic is described in connection with an embodiment that is included in at least one embodiment. Thus, the appearances of the phrases "in one embodiment" or "in an embodiment" in various places throughout this disclosure are not necessarily all referring to the same embodiment. In addition, the term "or" is intended to mean an inclusive "or" rather than an exclusive "or."
[0086] Although the present disclosure contains many specific implementation details, these should not be interpreted as limitations on the scope of any invention or what may be claimed, but rather as descriptions of features specific to certain embodiments of a particular invention. Certain features described in the present disclosure in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination. Also, although features may be described above as acting in a combination and may be initially claimed as such, one or more features from the claimed combination may, in some cases, be deleted from the combination, and the claimed combination may be directed to a subcombination or a variation of the subcombination.
[0087] Similarly, although operations and / or logic flows are depicted in the figures and / or described herein in a particular order, this should not be understood as requiring such operations and / or logic flows to be performed in the particular order shown, or in a sequential order, or that all of the illustrated operations be performed, to achieve desirable results. In some situations, multitasking and parallel processing may be advantageous. Also, it should be understood that the separation of various system components in the embodiments described above should not be understood as requiring such separation in all embodiments, and that the program components and systems described may generally be integrated together in a single software product or packaged into multiple software products.
[0088] Thus, specific embodiments of the subject matter have been described. Other embodiments are within the scope of the following claims. In some cases, the actions recited in the claims can be performed in a different order and still achieve desirable results. In addition, the processes depicted in the accompanying figures do not necessarily require the particular order shown, or sequential order, to achieve desirable results. In some implementations, multitasking and parallel processing may be advantageous.
[0089] The word "embodiment" or "exemplary" is used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as "embodiment" or "exemplary" is not necessarily to be construed as preferred or advantageous over other aspects or designs. Rather, use of the word "embodiment" or "exemplary" is intended to present concepts in a specific manner. As used herein, the term "or" is intended to mean an inclusive "or" rather than an exclusive "or." That is, unless otherwise specified or clear from the context, "X includes A or B" is intended to mean any of the natural inclusive permutations. That is, if X includes A, X includes B, or X includes both A and B, then "X includes A or B" is satisfied under any of the foregoing cases. In addition, the articles "a" and "an" as used in this application and the appended claims should generally be construed to mean "one or more," unless otherwise specified or clear from the context to be directed to the singular. Furthermore, use of the terms "in an embodiment" or "one embodiment" or "an implementation" or "one implementation" throughout is not intended to refer to the same embodiment or implementation unless so described. Furthermore, the terms "first," "second," "third," "fourth," etc. as used herein are meant as labels to distinguish between different elements and do not necessarily have an ordinal meaning according to their numerical designations.
[0090] In the above description and claims, phrases such as "at least one of" or "one or more of" may occur followed by a conjunctive list of elements or features. The term "and / or" may also occur within a list of two or more elements or features. Unless otherwise contradicted by the context in which it is used, implicitly or explicitly, such a phrase is intended to mean any of the listed elements or features individually or in combination with any of the other listed elements or features. For example, the phrases "at least one of A and B," "one or more of A and B," and "A and / or B" are intended to mean "A only, B only, or A and B together," respectively. A similar interpretation is also intended with respect to lists containing three or more items. For example, the phrases "at least one of A, B, and C," "one or more of A, B, and C," and "A, B, and / or C" are intended to mean "A only, B only, C only, A and B together, A and C together, B and C together, or A and B and C together." Additionally, use of the term "based on" above and in the claims is intended to mean "based at least in part on," such that unrecited features or elements are also permissible.
[0091] The above description of the illustrated implementations of the invention is not intended to be exhaustive or to limit the invention to the precise form disclosed. Although specific implementations of the invention and examples thereof are described herein for illustrative purposes, various equivalent modifications are possible within the scope of the invention, as one of ordinary skill in the art would recognize. The subject matter described herein can be embodied in systems, devices, methods, and / or articles, depending on the desired configuration. The implementations described in the foregoing description do not represent all implementations consistent with the subject matter described herein. Instead, they are merely some examples consistent with aspects related to the described subject matter. Although some variations have been described in detail above, other modifications or additions are possible. In particular, further features and / or variations can be provided in addition to those described herein. For example, the implementations described above can be directed to various combinations and subcombinations of the disclosed features and / or combinations and subcombinations of some additional features disclosed above. Other implementations may also be within the scope of the following claims.
Claims
1. 1. A method comprising: receiving, by at least one data processor, a first request from a first client device of a user to initiate an interactive session with a cloud-based client application, the cloud-based client application configured to execute on a second client device, the second client device comprising a different computing platform than the first client device; reserving, by the at least one data processor, an application engine from a pre-instantiated application engine pool of a plurality of pre-instantiated application engine pools for executing the cloud-based client application remotely from the first client device in response to the first request; receiving, by the at least one data processor, interaction data from the first client device when the user engages with first media data associated with the cloud-based client application; modifying, by the at least one data processor, the cloud-based client application executing within the subscribed application engine based on the interaction data received from the first client device; receiving, by the at least one data processor, a second request from the first client device to terminate an interactive session with the cloud-based client application to be modified; deallocating, by the at least one data processor, the reserved application engine in response to the second request, wherein the reserved application engine is unlinked from the first client device; A method comprising:
2. The method of claim 1 , further comprising streaming, by the at least one data processor, the first media data from the cloud-based client application to the first client device.
3. 2. The method of claim 1, further comprising streaming, by the at least one data processor, second media data from the modified cloud-based client application to a browser application executing on the first client device.
4. 2. The method of claim 1, wherein the reserved application engine is linked to the first client device for the duration of the interactive session, and wherein pre-instantiated application engines are added to the pre-instantiated application engine pool to replace the reserved application engine, and each pre-instantiated application engine pool of the plurality of pre-instantiated application engine pools is associated with a different cloud-based client application.
5. The method of claim 1 , wherein the first request includes at least one characteristic associated with the first client device.
6. The at least one characteristic characterizes a geographic area associated with the first client device, and the modification of the cloud-based client application further comprises: Presenting, on the first client device, one or more visual features specific to a geographic area associated with the first client device. The method of claim 5 , comprising:
7. 7. The method of claim 6, wherein the one or more visual features specific to a geographic area associated with the first client device comprise one or more of an interface change or an advertisement.
8. receiving input from the user prior to the second request from the first client device to terminate the interactive session; in response to the input, pausing an interactive session with the cloud-based client application at a particular location, the pausing being distinct from terminating the interactive session; The method of claim 1 further comprising:
9. receiving an additional input to resume the interactive session on a third client device; in response to receiving the additional input, resuming the interactive session at the particular location on the third client device; and The method of claim 8 , further comprising:
10. 1. A system comprising: at least one data processor; A memory having instructions stored therein that, when executed by the at least one data processor, cause the at least one data processor to: receiving a first request from a first client device of a user to initiate an interactive session with a cloud-based client application, the cloud-based client application configured to execute on a second client device, the second client device comprising a different computing platform than the first client device; in response to the first request, reserving an application engine from a pre-instantiated application engine pool of a plurality of pre-instantiated application engine pools to execute the cloud-based client application remotely from the first client device; receiving interaction data from the first client device when the user engages with first media data associated with the cloud-based client application; modifying the cloud-based client application executing in the application engine to be subscribed based on the interaction data received from the first client device; receiving a second request from the first client device to terminate an interactive session with the cloud-based client application to be modified; deallocating the reserved application engine in response to the second request, wherein the reserved application engine is unlinked from the first client device; and A memory and A system comprising:
11. The operation further comprises: Streaming the first media data from the cloud-based client application to the first client device. The system of claim 10 , comprising:
12. The operation further comprises: Streaming second media data from the modified cloud-based client application to a browser application executing on the first client device. The system of claim 10 , comprising:
13. 11. The system of claim 10, wherein the reserved application engine is linked to the first client device for the duration of the interactive session, and wherein pre-instantiated application engines are added to the pre-instantiated application engine pool to replace the reserved application engine, and each pre-instantiated application engine pool of the plurality of pre-instantiated application engine pools is associated with a different cloud-based client application.
14. The system of claim 10 , wherein the first request includes at least one characteristic associated with the first client device.
15. The at least one characteristic characterizes a geographic area associated with the first client device, and the operation of modifying the cloud-based client application further comprises: Presenting, on the first client device, one or more visual features specific to a geographic area associated with the first client device. The system of claim 14 , comprising:
16. 16. The system of claim 15, wherein the one or more visual features specific to a geographic area associated with the first client device comprise one or more of an interface change or an advertisement.
17. The operation further comprises: receiving input from the user prior to the second request from the first client device to terminate the interactive session; in response to the input, pausing an interactive session with the cloud-based client application at a particular location, the pausing being distinct from terminating the interactive session; The system of claim 10 , comprising:
18. The operation further comprises: receiving an additional input to resume the interactive session on a third client device; in response to receiving the additional input, resuming the interactive session at the particular location on the third client device; and The system of claim 17 , comprising:
19. 1. A non-transitory computer program product, the non-transitory computer program product storing executable instructions which, when executed by at least one data processor forming part of at least one computing system, receiving a first request from a first client device of a user to initiate an interactive session with a cloud-based client application, the cloud-based client application configured to execute on a second client device, the second client device comprising a different computing platform than the first client device; in response to the first request, reserving an application engine from a pre-instantiated application engine pool of a plurality of pre-instantiated application engine pools to execute the cloud-based client application remotely from the first client device; receiving interaction data from the first client device when the user engages with first media data associated with the cloud-based client application; modifying the cloud-based client application executing in the application engine to be subscribed based on the interaction data received from the first client device; receiving a second request from the first client device to terminate an interactive session with the cloud-based client application to be modified; deallocating the reserved application engine in response to the second request, wherein the reserved application engine is unlinked from the first client device; and 2. A non-transitory computer program product performing operations including:
20. The operation further comprises: Streaming the first media data from the cloud-based client application to the first client device.
20. The non-transitory computer program product of claim 19, comprising: