SYSTEM AND METHOD FOR REMOTE CONTROL OF CLOUD-BASED CLIENT APPLICATIONS - Patent application
The system addresses latency issues in cloud-based applications by remotely controlling them on a cloud platform, allowing real-time interaction and reducing signal delays through a cloud-connected controller.
Patent Information
- Application Number
- JP2025522955
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2022-10-20
- Filing Date
- 2023-10-20
- Publication Date
- 2025-11-07
AI Technical Summary
Cloud-based client applications face challenges with high latency due to signal transmission delays, particularly in cloud gaming, which affects user experience and controller lag.
A system and method for remotely controlling cloud-based client applications by emulating them on a cloud-based platform, streaming video and audio to a user's device, and allowing real-time interaction through a cloud-connected controller to reduce latency.
Significantly reduces signal latency by enabling real-time interaction with cloud-based applications, supporting various devices and operating systems, and overcoming hardware limitations.
Smart Images

Figure 2025536542000001 
Figure 2025536542000002 
Figure 2025536542000003
Abstract
Description
[Technical Field]
[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This application claims the benefit of U.S. Provisional Application No. 63 / 380,327, filed October 20, 2022, the entire contents of which are incorporated herein by reference. [Background technology]
[0002] background Interacting with cloud-based client applications can present both opportunities and challenges to users. Launching a remote instance of a client application can alleviate platform limitations and decouple hardware requirements from client application performance, but the limiting factor can be connection latency. The user experience can depend on the quality of the connection to the service and the amount of time it takes for the user's input to be transmitted to the server, processed, and sent back to the user. Such limitations can be particularly problematic in cloud-based games. In local games, one of the key metrics players care about is controller lag, the time it takes for the player's device to process signals from their controller input and for the game to register the input. Typically, players prefer response times of less than 20 milliseconds. However, when combined with cloud-based games, controller latency can increase, as signals travel from the controller to the device for processing, relayed to the cloud gaming service as input, and sent back to the user. Summary of the Invention [Means for solving the problem]
[0003] overview The present invention relates to a system and method for remotely controlling a cloud-based client application. According to the present invention, a client application can be remotely 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 application running on a user's client device. Input from the user can be transmitted back to the client application engine to enable the user to control and interact with the cloud-based client application in real time. A cloud-connected client application controller can be connected to the cloud-based client application platform rather than the user's device to significantly reduce signal latency.
[0004] In one aspect, a method includes receiving, by at least one data processor, a first request from a client device of a first user to initiate an interactive session with a cloud-based client application and a second request from a cloud-connected client application controller of the first user to connect to the interactive session, the cloud-based client application configured to execute on a computing platform different from the client device and the cloud-connected application controller, the cloud-connected application controller being separate from and in communication with the client device. The method also includes 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 in response to the first request, wherein the cloud-based client application executes in the pre-instantiated application engine pool remotely from the client device and the cloud-connected application controller. The method also includes connecting, by the at least one data processor, to the cloud-connected client application controller separate from the client device in response to the second request. The method also includes receiving, by the at least one data processor, interaction data when the first user engages with the first media data associated with the cloud-based client application via the cloud-connected client application controller as the first media data is displayed to the first user via a display application executing on the client device. The method also includes modifying, by the at least one data processor, the cloud-based client application executing within the application engine based on the received interaction data.The method also includes providing, by the at least one data processor, second media data associated with the modified cloud-based client application to the first user via a display application executing on the client device for interaction via the cloud-connected application controller.
[0005] For example, the method may further include maintaining the application engine in a standby or sleep mode before receiving the first request.
[0006] For example, the method may further include reserving the application engine from a pre-instantiated application engine pool and then replacing the application engine with a second application engine.
[0007] For example, the pre-instantiated application engine pool has a fixed size.
[0008] For example, the pre-instantiated application engine pool has a dynamically changing size.
[0009] For example, the size may vary based at least in part on usage trends or historical usage information.
[0010] For example, the pre-instantiated application engine pool increases in size as usage trends increase for application engine modules, and decreases in size as usage trends decrease for application engine modules.
[0011] For example, varying the size of the pre-instantiated application engine pool includes training a machine learning model based on usage trend data for the application engine modules to modify the size of the pre-instantiated application engine pool to minimize the amount of time to allocate application modules and maintain a reduced allocation time for allocation of application modules, and modifying the size of the pre-instantiated application engine pool using the trained machine learning model.
[0012] For example, at least a first subset of the pre-instantiated application engine pools of the plurality of pre-instantiated application engine pools includes fixed-size pre-instantiated application engine pools, and at least a second subset of the pre-instantiated application engine pools of the plurality of pre-instantiated application engine pools includes dynamic-size pre-instantiated application engine pools.
[0013] For example, the first subset includes pre-instantiated application engine pools that have lower usage than the pre-instantiated application engine pools of the second subset.
[0014] In one aspect, a system includes at least one data processor. The system also includes a memory that stores instructions that, when executed by the at least one data processor, cause the at least one data processor to perform a set of operations. The operations include receiving a first request from a client device of a first user to initiate an interactive session with a cloud-based client application and a second request from a cloud-connected client application controller of the first user to connect to the interactive session, the cloud-based client application configured to execute on a computing platform different from the client device and the cloud-connected application controller, the cloud-connected application controller being separate from and in communication with the client device. The operations also include reserving an application engine from a pre-instantiated application engine pool of a plurality of pre-instantiated application engine pools in response to the first request, within which the cloud-based client application executes remotely from the client device and the cloud-connected application controller. The operations also include connecting to the cloud-connected client application controller separate from the client device in response to the second request. The operations also include receiving interaction data when the first user engages with the first media data associated with the cloud-based client application via the cloud-connected client application controller as the first media data is displayed to the first user via a display application executing on the client device, and modifying the cloud-based client application executing within the application engine based on the received interaction data.The operations also include providing second media data associated with the modified cloud-based client application to the first user via a display application executing on the client device for interaction via the cloud-connected application controller.
[0015] For example, the operations may further include maintaining the application engine in a standby or sleep mode before receiving the first request.
[0016] For example, the operations may further include reserving the application engine from a pre-instantiated application engine pool and then replacing the application engine with a second application engine.
[0017] For example, the pre-instantiated application engine pool has a fixed size.
[0018] For example, the pre-instantiated application engine pool has a dynamically changing size.
[0019] For example, the size may vary based at least in part on usage trends or historical usage information.
[0020] For example, the pre-instantiated application engine pool increases in size as usage trends increase for application engine modules, and decreases in size as usage trends decrease for application engine modules.
[0021] For example, varying the size of the pre-instantiated application engine pool includes training a machine learning model based on usage trend data for the application engine modules to modify the size of the pre-instantiated application engine pool to minimize the amount of time to allocate application modules and maintain a reduced allocation time for allocation of application modules, and modifying the size of the pre-instantiated application engine pool using the trained machine learning model.
[0022] For example, at least a first subset of the pre-instantiated application engine pools of the plurality of pre-instantiated application engine pools includes fixed-size pre-instantiated application engine pools, and at least a second subset of the pre-instantiated application engine pools of the plurality of pre-instantiated application engine pools includes dynamic-size pre-instantiated application engine pools.
[0023] For example, the first subset includes pre-instantiated application engine pools that have lower usage than the pre-instantiated application engine pools of the second subset.
[0024] In one aspect, a computer program product comprises a non-transitory machine-readable medium storing instructions that, when executed by at least one programmable processor forming part of at least one computing system, cause the at least one programmable processor to perform a set of operations. The operations include receiving a first request from a client device of a first user to initiate an interactive session with a cloud-based client application and a second request from a cloud-connected client application controller of the first user to connect to the interactive session, the cloud-based client application configured to execute on a computing platform different from the client device and the cloud-connected application controller, the cloud-connected application controller being separate from and in communication with the client device. The operations also include reserving an application engine from a pre-instantiated application engine pool of a plurality of pre-instantiated application engine pools in response to the first request, within which the cloud-based client application executes remotely from the client device and the cloud-connected application controller. The operations also include connecting to the cloud-connected client application controller separate from the client device in response to the second request. The operations also include receiving interaction data when the first user engages with the first media data associated with the cloud-based client application via the cloud-connected client application controller as the first media data is displayed to the first user via a display application executing on the client device, and modifying the cloud-based client application executing within the application engine based on the received interaction data.The operations also include providing second media data associated with the modified cloud-based client application to the first user via a display application executing on the client device for interaction via the cloud-connected application controller. [Brief explanation of the drawings]
[0025] BRIEF DESCRIPTION OF THE DRAWINGS The above embodiments will be more fully understood from the following detailed description taken in conjunction with the accompanying drawings, in which: The drawings are not intended to be drawn to scale, and for clarity, not every component is labeled in every drawing.
[0026] [Figure 1] FIG. 1 is a block diagram illustrating an example of a cloud-based client application platform for remotely controlling cloud-based client applications.
[0027] [Figure 2] FIG. 2 is a block diagram illustrating an example of a cloud-based client application platform with multiple application engine module pools for remotely controlling cloud-based client applications.
[0028] [Figure 3] FIG. 3 is a block diagram illustrating an example of a cloud-based client application platform with multiple application engine module pools and multiple application instance module pools for remotely controlling cloud-based client applications.
[0029] [Figure 4] FIG. 4 is a flowchart of an example method for remotely controlling a cloud-based client application.
[0030] [Figure 5] FIG. 5 is a block diagram of an example computing device that may perform one or more of the operations described herein according to embodiments. DETAILED DESCRIPTION OF THE INVENTION
[0031] Detailed Description of the Invention 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 understand that the devices and methods specifically described herein and shown in the accompanying drawings are non-limiting exemplary embodiments, and that the scope of the 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, like-named components of embodiments generally have similar characteristics, and therefore, within a particular embodiment, every feature of each like-named component is not necessarily described in detail.
[0032] The present invention relates to a system and method for remotely controlling cloud-based client applications. According to the present invention, a client application can be remotely rendered on an emulated client device 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 a user's client device. The user can interact with the cloud-based client application through a local browser or application as if the client application were running natively on the client device. Input from the user can be sent back to the remote emulated device to enable 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., smartphone, tablet, laptop, desktop computer, game console, etc.) running any type of operating system and independent of the underlying hardware and device characteristics of the client device. The cloud-based client application can include, for example, a mobile game or any other suitable type of client application designed to run on a client device but that can be remotely rendered and remotely controlled on a client device in accordance with embodiments of the present invention. In some embodiments of the present invention, a cloud-connected client application controller, such as a mobile game controller, may remotely communicate with or otherwise connect to a cloud-based client application platform rather than a user's device to substantially reduce signal latency.The cloud-connected client application controller may include appropriate electronics, such as a Wi-Fi chip and microprocessor, capable of initiating and managing remote (e.g., wireless) connections with a cloud-based client application platform. In one embodiment, a mobile user may choose to connect the cloud-connected client application controller via a wireless hotspot or the like. In addition to cloud connectivity, the cloud-connected client application controller may provide a local connection mode for interfacing with a client device that interacts with a cloud-based client application or with an application running on the client device itself. Such modes may be user-selectable or automatic, depending on preference. For example, external factors, such as the presence of a Wi-Fi connection within range of the client device or host Bluetooth device, may be used to determine the connection mode of the cloud-connected client application controller in a manner that is completely transparent to the user.
[0033] Embodiments of the present invention can support content distribution across different platforms. For example, for touchscreen games on mobile devices where the platform is locked down, some implementations of the present invention can circumvent mobile application store policies that prohibit certain styles of game distribution by relying instead on the client device's browser. Embodiments of the present invention can also be used to address client application controller compatibility issues that may arise when attempting to interface with a client application running in the cloud through a mobile browser. Some mobile operating systems may prevent a paired controller from interacting with content within the mobile browser. In some implementations of the present invention, a cloud-connected client application controller can mitigate such hardware blocks by interfacing directly with a cloud-based client application platform. Some implementations of the present invention can overcome remote connection challenges with client application controllers that do not have a display or keyboard. For example, through the use of Internet of Things (IoT) and home automation technologies, various pairing methods can be used that are not dependent on having a display. For example, once a cloud-connected client application controller has access to an Internet-enabled Wi-Fi or other remote connection access point, various methods can be used to connect to a cloud-based client application platform. For purposes of explanation and not limitation, this disclosure may refer to a cloud-based mobile game as an exemplary cloud-based client application to illustrate various aspects of the present invention. However, the present invention may be used in and with any suitable type of client application that can be remotely rendered on and operated remotely from a client device.
[0034] FIG. 1 is a block diagram illustrating an exemplary cloud-based client application platform 100 for remotely controlling 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 another suitable cloud-based infrastructure provider) or may be comprised of dedicated server hardware. The server system 102 may include an application engine module controller 104. The application engine module controller 104 may include multiple application engine modules 106 for supporting any suitable type of cloud-based client application. In embodiments, each application engine module of the multiple application engine modules 106 may be configured to emulate a particular type and configuration of a client device for executing the cloud-based client application. For example, in some implementations of the present invention, each or any of the application engine modules may include a suitable client device emulator. Each cloud-based client application may execute within a respective application engine module of the multiple application engine modules 106 as if the client application were running natively on a given client device. The application engine module controller 104 may enable registration / deregistration of application engine modules, atomic reservation of application engine modules, querying 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 described below. Each application engine module 108, 114, 120, ..., 126 may include a video / audio module for managing video and / or audio media data generated by a cloud-based client application executing on the respective application engine module and transmitting or otherwise streaming 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 for receiving and processing input from the 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 on the 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 a first state module 112. The second application engine module 114 may include a second video / audio module 116 in communication with a second state module 118. The third application engine module 120 may include a third video / audio module 122 in communication with a third state module 124. The Nth application engine module 126 may include an Nth video / audio module 128 in communication with an Nth state module 130.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., delete or deallocate) the application engine modules as needed. In one embodiment, the server system 102 may 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.
[0035] In some implementations of the present invention, each application engine module 108, 114, 120, ... 126 can be launched as an essential container within a ReplicaSet, such as Kubernetes, using, for example, 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 maintain a specified number of application engine modules constant. A ReplicaSet can maintain a specified number of application engine module instances running within or in conjunction with the application engine module controller 104 at any given time to prevent users from losing access to cloud-based client applications when an application engine module fails or is inaccessible. In one embodiment, each application engine module 108, 114, 120, ... 126 can also include health checks, etc., and a transmitter proxy (as either an egress proxy or an ingress proxy, or both) that can handle, for example, Cross-Origin Resource Sharing (CORS) requests or other similar requests. Additionally or alternatively, each application engine module 108, 114, 120, ... 126 may include a debug bridge for receiving and processing debug and other application engine module commands (e.g., from the application engine reservation controller 134 described below).
[0036] In one embodiment, the application engine module controller 104 may include a video / audio communication module 132 for supporting media communication between an application engine module of the plurality of application engine modules 106 and a client device. In an alternative embodiment, the video / audio communication module 132 may reside within the server system 102 but may be external to and in communication with the application engine module controller 104. Additionally or alternatively, each or any application engine module of the plurality of application engine modules 106 may include or communicate with a respective video / audio communication module 132. In other words, each or any of the plurality of video / audio communication modules 132 may 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 may comprise a TURN (Traversal Using Relay NAT) server or the like (e.g., a STUN (Session Traversal Utilities for NAT) server or the like) for supporting communication of video / audio media data between the application engine module and a client device. Additionally or alternatively, the video / audio communication module 132 may comprise a suitable encoder for encoding video, for example, in h.264 or VP8 for WebRTC, etc. However, other suitable server communication protocols, encoding techniques, and / or transmission protocols for video / audio media data are also possible.
[0037] 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 scaling of the application engine modules, controlling access to the application engine modules, managing initialization of the application engine modules for users, etc. 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 allow application engine module reservations for use in active sessions. In some embodiments of the present invention, when a user requests to start 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 the reserved application engine module with the requested cloud-based client application (if not already loaded or pre-loaded), 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 bind or otherwise link the reserved application engine module to the active session.If there is no application engine module available in 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 scaler module 138, described below) to add and register a new application engine module to the requested action session.
[0038] In some embodiments of the present invention, the registration process can be performed asynchronously. For example, the application engine inventory and reservation module 136 can wait for new application engine modules to be added and reserved by periodically polling the application engine module controller 104 or by receiving an appropriate message from the application engine module controller 104 after a task is completed. Once an application engine module is registered, it can be reserved for an active session and bound to the active session. In some embodiments of the present invention, an application engine module reserved for an active session may be accessible only to the user who requested it and only for the life of the active session. In other words, an application engine module reserved for a particular active session may not be used or accessed by another user during that active session. In some embodiments of the present invention, data stored in or otherwise used by a reserved application engine module during an active session may be temporary. For example, the application engine module can be deregistered at the end of the active session. Thus, any and all data stored or otherwise used by the application engine module during that active session can be deleted, for example, prior to deregistration of the application engine module. In alternative embodiments, data stored or otherwise used in a reserved application engine module during an active session may be stored (e.g., stored in database 146), retrieved, and used by the user in a subsequent active session. When an application engine module is deregistered, it may be reused for another active session, or its computing resources may be reallocated to a different application engine module.
[0039] In an embodiment, the application engine reservation controller 134 may include an application engine scalar module 138 that communicates with the application engine inventory and reservation module 136. The application engine scalar 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 scalar module 138 may proactively scale the number of application engine modules in the plurality of application engine modules 106 based on usage trends or other suitable metrics, for example, to maintain a sufficiently sized pool of reservable application engine modules. For example, the application engine scalar module 138 may store a predetermined 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 predetermined threshold, the application engine scalar module 138 may add a new application engine module to the plurality of application engine modules 106 to increase the number of reservable application engine modules above the predetermined threshold. If the increase in the number of reservable application engine modules becomes excessively large (e.g., exceeds a second predetermined threshold), the application engine scaler module 138 may take no action, or may remove or otherwise deallocate unnecessary excess application engine modules from the plurality of application engine modules 106. Additionally or alternatively, suitable machine learning / artificial intelligence techniques may be employed by 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-hour usage, etc.). The machine learning model can then be used to dynamically add and remove / de-allocate application engine modules within the plurality of application engine modules 106. The machine learning model can be updated or otherwise adapted as usage data evolves over time. In some implementations of the present invention, the plurality of application engine modules 106 can be associated with or otherwise correspond to and communicate with one or more application engine module pools, which can be managed, for example, by the application engine inventory and reservation module 136 and / or the application engine scalar module 138. For example, the application engine modules of each or any emulated client device supported by the cloud-based client application platform 100 can be maintained within a single, large application engine module pool. Application engine modules for active sessions requested by users can be allocated, reserved, and instantiated from such a single application engine module pool, for example, by the application engine inventory and reservation module 136 and / or the application engine scalar module 138. However, accessing and instantiating each application engine module from such a single large application engine module pool can create potential bottlenecks. For example, it can take a significant 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 who have corresponding application engine modules instantiated for cloud-based client application platform 100 at any given time.The resulting allocation delays can adversely affect the performance of the cloud-based client application platform 100 and user interaction, potentially resulting in user dissatisfaction and even user churn.
[0040] FIG. 2 is a block diagram illustrating an exemplary cloud-based client application platform 200 having multiple application engine module pools for remotely controlling 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 can 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 a particular type of application engine module or a set of related types of application engine modules. The multiple application engine modules 206 can operate in a manner similar to that described and illustrated with respect to the multiple application engine modules 106 of FIG. 1. In the embodiment shown in FIG. 2, each cloud-based client application can have or be associated with its own individual application engine module pool. For example, each pool of the multiple application engine module pools can be configured to support a single cloud-based client application, such that each pool of the multiple application engine module pools can be allocated for each cloud-based client application. By way of example and not 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 first application engine modules.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.), thereby allowing each pool of the multiple application engine module pools to be allocated by application engine module type. Any suitable number of application engine module pools may 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 application engine module types) supported by the system or any suitable subset thereof.
[0041] In some embodiments 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 within the application engine module pool and then placed in a standby or sleep mode, for example, by application engine inventory and reservation module 136 and / or application engine scaler module 138. By spinning up application engine modules in each application engine module pool in the background and maintaining those spun-up application engine modules in standby mode, waking up an application engine module that is in standby mode takes substantially less time than instantiating an application engine module from scratch, so the application engine modules can be immediately (or near-immediately) reserved and assigned to a user upon request for an active session with little or no associated delay. Once an application engine module in an application engine module pool is reserved and allocated, the reserved and allocated application engine module can be immediately (or near-immediately) replaced with another "pre-warmed" application engine module from the corresponding application engine module pool so that it is ready for immediate (or near-immediate) reservation and allocation by the next user requesting an active session. This "pre-warmed" replacement process can continue as each application engine module in the application engine module pool is reserved and allocated. In this manner, application engine modules from each of multiple application engine module pools can be allocated to users in real time.In this disclosure, “real-time” may refer to processing that may occur instantaneously or within a short period of time (e.g., a few seconds) so 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 may be deleted or otherwise deallocated immediately (or nearly immediately) 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 may be reallocated, for example, by application engine inventory and reservation module 136 and / or application engine scaler module 138 to pre-warm another application engine module by adding it to an associated or different application engine module pool, rather than maintaining computing resources for a reserved application engine module no longer needed for an inactive session.
[0042] The size of each or any of the multiple application engine module pools may be fixed or dynamic. For example, the size of the application engine module pool may be fixed such that a predetermined application engine module pool size number of pre-warmed application engine modules may 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 may 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 may be based, for example, on usage trends of the particular application engine module, historical usage information, or other suitable metrics. Thus, a frequently used application engine module may have a larger predetermined application engine module pool size number, and a less frequently used application engine module may have a smaller predetermined application engine module pool size number.
[0043] Additionally or alternatively, the size of the application engine module pool may be dynamic. In some embodiments of the present invention, the application engine inventory and reservation module 136 and / or the application engine scalar module 138 may monitor the usage trends of each or any of the multiple application engine modules 206 in real time. For example, as the usage trend of a particular application engine module increases, the application engine scalar module 138 may 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 greater usage, so that application engine module allocation can continue in real time without additional delays. Conversely, as the usage trend of a particular application engine module decreases, the application engine scalar module 138 may 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 lower usage, so that computing resources are not unnecessarily over-utilized and can be allocated elsewhere. In such an embodiment, the size of each or any of the application engine module pools may be dynamically varied to accommodate periods of increased usage (e.g., usage spikes) and lulls in usage in order to maintain real-time allocation of application engine modules.
[0044] In some embodiments of the present invention, the application engine inventory and reservation module 136 and / or the application engine scalar module 138 may include a suitable predictive model or use a suitable machine learning / artificial intelligence technique to determine the application engine module pool sizes of the multiple application engine module pools. For example, a machine learning model may be trained based on usage trend data for each supported application engine module to modify the application engine module pool size for the application engine module to minimize the amount of time to allocate the application engine module and maintain a reduced allocation time for real-time application engine module allocations. 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 exhibited at a particular time for that application engine module. The machine learning model may be updated or otherwise adapted as application engine module usage trends 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 embodiments of the present invention, the size of each application engine module pool in a subset of the multiple application engine module pools may be fixed, while the size of other application engine module pools in the multiple application engine module pools may be dynamic. For example, frequently used application engine modules may be associated with a dynamic-sized application engine module pool, while less frequently used application engine modules may be associated with a fixed-sized application engine module pool. Additionally or alternatively, the size of a particular application engine module pool may be fixed at certain 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 may be fixed. However, during (e.g., intermittent) periods of higher usage (e.g., usage spikes), the size of the corresponding application engine module pool may be dynamic. The application engine inventory and reservation module 136 and / or the application engine scalar module 138 may switch the application engine module pool size back to fixed when the period of higher usage ends. In this way, 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 reduced allocation times for real-time allocation of application engine modules.
[0045] In some embodiments of the present invention, one or more application engine module pools may be maintained within and with the plurality of application engine modules 206, as shown in Figure 2. However, in some embodiments of the present invention, each or any of the one or more application engine module pools may be maintained external to the plurality of application engine modules 206 but within or with the application engine module controller 104 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 in the database 146. Additionally or alternatively, each or any of the one or more application engine module pools may be maintained in or with a suitable cloud or server storage system that is remote from and in communication with the server system 102.
[0046] As shown in FIGS. 1 and 2 , the server system 102 may include a session management controller 140 for managing active sessions. The session management controller 140 may communicate with the application engine reservation controller 134. In some embodiments 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 for managing the allocation of application engine modules, including registration, deregistration, and scaling (e.g., communicating and coordinating with the application engine inventory and reservation module 136 and the application engine scaler module 138). The session manager module 142 may also function as a coordinator for the server system 102 to support, for example, load balancing and latency. The session manager module 142 may receive requests to initiate active sessions from client devices. Additionally, the session manager module 142 may receive session information from the client device (e.g., in addition to or as part of the request) that can 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 required, one or more characteristics of the client device (e.g., the type of client device, the operating system, etc.), and other similar characteristics or data.
[0047] 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. By way of example and not limitation, a user with 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 run 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 emulator 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 to start the (cloud-based) Klondike Solitaire mobile game in the Android® application engine module (e.g., passed to the Android® mobile game application engine module reserved via the application engine inventory and reservation module 136). The user can then begin remote interaction with the (cloud-based) Klondike Solitaire mobile game via the PC laptop, as if the Klondike Solitaire mobile game were running natively on the PC laptop itself. If an Android® Klondike Solitaire cloud-based mobile game application engine module is not available, 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 plurality of application engine modules 106 or 206 in the manner described above.
[0048] In some embodiments of the present invention, session management controller 140 (e.g., session manager module 142 and application engine selector module 144) may coordinate with and control application engine reservation controller 134 (e.g., application engine inventory and reservation module 136 and application engine scaler module 138) to manage one or more application engine module pools, as shown and described with respect to Figure 2. Additionally or alternatively, session management controller 140 may directly coordinate with and control application engine module controller 104 to manage one or more application engine module pools.
[0049] In one embodiment, the application engine subscription controller 134 may, for example, identify and maintain usage trends of 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 recommend cloud-based client applications to each user or to any user. In one embodiment, the session manager module 142 may include a recommendation engine, etc. The recommendation engine may receive usage trend information from the application engine subscription 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., for users using a particular type of client device, etc., overall, in a particular genre), a list of the most popular cloud-based client applications at a particular time or range of times (e.g., the past hour, the past day, the past week, etc.), etc. 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 may recommend other cloud-based games of the same or similar genre (e.g., Spider Solitaire, Tripeaks Solitaire, etc.), regardless of the device platform on which the games are based (because the device platform is emulated by any of the multiple application engine modules 106 or 206). Other recommendations are possible. Additionally or alternatively, suitable machine learning / artificial intelligence techniques may 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-hours 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 users based on their 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 appropriate 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 have the indicated application engine module selected and reserved in the manner described herein to initiate an active session for the user.
[0050] Server system 102 may include one or more databases 146 that may be in communication with one or more of application engine module controller 104, application engine reservation controller 134, and session management controller 140. Database 146 may be cloud-based or may reside on one or more physical storage systems. Database 146 may include, for example, any suitable information related to application engine modules, management of 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 applications, input from client devices, session logs, and other similar data.
[0051] In some implementations of the present invention, cloud-based client application platform 100 or 200 may include one or more client devices 148 in communication with server system 102 (e.g., via the Internet or other suitable network). According to embodiments, client device 148 may be any suitable type of device capable of launching a suitable browser or other suitable application with which a user may interact (e.g., via a touchscreen or pointing device, such as a mouse or stylus), such as, for example, a smartphone, tablet, laptop, desktop computer, game console, smart TV, smartwatch, or any other suitable device capable of supporting such user input and interaction via a browser or other suitable application. In embodiments, the present 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 and independent of the underlying hardware and device characteristics of client device 148.
[0052] A cloud-based client application may be any suitable client application configured to run natively on any suitable type of client device 148, but may be remotely executed and rendered in the cloud in an application engine module of one of the application engine modules 106 or 206 of the server system 102 according to embodiments of the present invention. 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 remotely provided as an end-user client application with which a user can interact via the server system 102. The software applications 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, finance, sports, etc. In particular embodiments, 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 one embodiment, the digital game may be an asynchronous competitive skill-based game in which players can compete against each other in the digital game, but do not have to play the digital game simultaneously. In an alternative embodiment, the digital game may be a synchronous competitive skill-based game in which players can play the digital game simultaneously 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.In the case of a cloud-based client application that allows two or more users to compete or otherwise engage with each other, each user interacts with the cloud-based client application at its respective reserved and assigned application engine module and can compete, play, or otherwise engage with each other using the back-end architecture (e.g., a game server in the context of a digital game) supported by the respective application engine module and cloud-based client application. Additionally or alternatively, one or more users interacting with the cloud-based client application at its respective reserved and assigned application engine module can compete, play, or otherwise engage with or interact with users interacting with a client application directly installed and running natively on their client device (i.e., without using an application engine module). Thus, embodiments of the present invention can enable users across a wide variety of different computing platforms to engage with each other regardless of the underlying client device 148 and the operating platform used by each or any user for their client device 148.
[0053] Client device 148 may include a browser module 150. 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, etc. Additionally or alternatively, browser module 150 may be a suitable application capable of supporting local rendering of video / audio information streamed from a cloud-based client application to client device 148 (e.g., via OpenGL, etc.). In one embodiment, browser module 150 may include a display module 152, an interaction capture module 154, and a session information module 156 that communicate with each other. Display module 152 may support display of video and / or audio information streamed from a cloud-based client application executing in a corresponding application engine module running on server system 102. In one embodiment, the video / audio output of a cloud-based client application running on the application engine module may 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 may receive the streamed video / audio output from the application engine module via the video / audio communication module 132 and appropriately render it on a display screen of the client device 148. A user may interact with the video / audio stream of the cloud-based client application in real time.In some implementations of the present invention, the user's input may be collected by interaction capture module 154 and communicated (over the Internet or other suitable network) via client device signaling communication module 158 (e.g., an appropriate data and signaling channel such as a gRPC gateway) to an application engine module within multiple application engine modules 106 or 206 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, allowing the user to (remotely) control and interact with the cloud-based client application in real time as if the cloud-based client application were running natively on client device 148.
[0054] In one embodiment, the display module 152 may also provide a display of any or all cloud-based client applications available for use by the user (e.g., as URLs or other links or hyperlinks within a browser application, as linked icons on a desktop within the user interface of the client device 148, etc.). The interaction capture module 154 may 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 selects the desired cloud-based client application, the session information module 156 may initiate an active session by communicating a request to the session management controller 140 (e.g., via a REST call, etc.). The session management controller 140 may then begin the process of reserving an appropriate application engine module for the active session, as described above. The session information module 156 may periodically poll the session management controller 140 (e.g., via REST, etc.) until an application engine module is reserved and assigned for the active session. Alternatively, the session management controller 140 may transmit an appropriate message or notification to the session information module 156 when an application engine module is reserved and assigned for an active session. Once an application engine module is reserved and assigned to a user's active session, the display module 152 on the client device 148 may 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 the video / audio media data streamed from the cloud-based client application.As a user interacts with the video / audio media data being streamed from a cloud-based client application running in a reserved application engine module, the interaction capture module 154 can provide the captured user input to the reserved application engine module via a client device 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. FIG. 3 is a block diagram illustrating an example cloud-based client application platform 300 having multiple application engine module pools and multiple application instance pools for remotely controlling cloud-based client applications, according to an embodiment of the present disclosure. As previously described, each of the application engine modules in the multiple application engine modules 206 can be configured to emulate a particular type and configuration of a client device for running 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 may be an instance of a cloud-based client application that may be configured to run natively on the server system 102 without using an application engine module from multiple application engine modules 206 (or 106). Accordingly, the server system 102 may include a module controller 304 that may operate in a manner similar to that discussed and described with respect to the application engine module controller 104 of FIGS.The module controller 304 may include multiple application engine modules 206 for supporting and emulating any suitable type of client device for executing any suitable type of cloud-based client application (as described with respect to FIGS. 1 and 2 ). The module controller 304 may also include multiple application instance modules 310 for supporting and executing 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, application instance module atomic reservation, application instance module query, etc., in a manner similar to that described for 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 for managing video and / or audio media data generated by the application instance and transmitting 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 for receiving and processing 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 that communicates 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 one 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 the module controller 304 may support any suitable number and combination of application engine modules and application instance modules.
[0055] As shown 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 plurality of application instance modules 310, including, for example, coordinating application instance module scaling, controlling application instance module access, managing user application instance module initialization, etc. 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 plurality of application instance modules 310. The inventory and reservation module 330 may grant application instance module reservations for use in active sessions. In some embodiments of the present invention, when a user requests to initiate an active session with an application instance module, the inventory and reservation module 330 may reserve an appropriate application instance module, populate or have populated the application instance module 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 no application instance module is available for the active session, the inventory and reservation module 330 may instruct the module controller 304 (e.g., via the scalar module 332, described below) to add and register a new application instance module for use with the requested active session. In some embodiments of the present invention, the registration process may be performed asynchronously. For example, the inventory and reservation module 330 may wait for a new application instance module to be added and reserved by periodically polling the module controller 304 or by receiving an appropriate message from the module controller 304 after a task is completed. Once the application instance module is registered, the application instance module may be reserved for the active session and bound to the active session. In some embodiments of the present invention, an application instance module reserved for an active session may be accessible only to the user who requested it for the life of the active session. In other words, an application instance module reserved for a particular active session may not be used or accessed by another user during that active session. In some embodiments of the present invention, data stored in or otherwise used by a reserved application instance module during an active session may be temporary. For example, an application instance module can be deregistered at the end of an active session, and thus any and all data stored or otherwise used by the application instance module during that active session can be deleted, for example, prior to deregistration of the application instance module.In an alternative embodiment, data stored or otherwise used in a reservation application instance module during an active session can be stored (e.g., stored in database 146), retrieved, and used by the user in subsequent active sessions. When 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.
[0056] In an embodiment, the reservation controller 328 may include a scalar module 332 in communication with the inventory and reservation module 330, which may 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 may also respond to changes in inventory and reservation by adding and instantiating new application instance modules to the plurality of application instance modules 310. The scalar module 332 may proactively scale the number of application instance modules in the plurality of application instance modules 310 based on usage trends or other suitable metrics, for example, to maintain a sufficiently sized pool of reservable application instance modules. For example, the scalar module 332 may store a predetermined 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 instance modules 310. If the number of reservable application instance modules decreases below the predetermined threshold, the scalar module 332 may add a new application instance module 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 large (e.g., exceeds a second predetermined threshold), the scalar module 332 may do nothing, or may remove or otherwise deallocate unnecessary excess application instance modules from the plurality of application instance modules 310. Additionally or alternatively, suitable machine learning / artificial intelligence techniques may 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-hour 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 usage data evolves over time.
[0057] In some implementations of the present 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 a particular type of application instance module or a set of related types of application instance modules. In such implementations, each application instance may have or be associated with its own individual application instance module pool. For example, each of the multiple application instance module pools may be configured to support a single application instance, such that each of the multiple application instance module pools may be allocated per application instance. By way of example and not limitation, a Klondike Solitaire game designed to run natively on the server system 102 may be supported by a first application instance module 312, and the first application instance module may be associated with a first application instance module pool 318 of the first application instance module. A bingo game designed to run natively on server system 102 may be supported by an Mth application instance module 320, which may be associated with an Mth application instance module pool 326 of Mth application instance modules, 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, e.g., on the number of application instances supported by the system or any suitable subset thereof.
[0058] In some embodiments 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 within the application instance module pool and then placed in a standby or sleep mode, for example, by the inventory and reservation module 330 and / or the scalar 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 a standby mode, waking up an application instance module in a standby mode takes substantially less time than instantiating an application instance module from scratch, so that the application instance module can be immediately (or nearly immediately) reserved and assigned to a user upon request for an active session with little or no associated delay. Once an application instance module in an application instance module pool is reserved and allocated, the reserved and allocated application instance module can be immediately (or nearly immediately) replaced by another “pre-warmed” application instance module from the corresponding application instance module pool so that it is ready for immediate (or nearly immediate) reservation and allocation 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 this manner, application instance modules from each of 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 may be deleted or otherwise deallocated immediately (or nearly immediately) when the active session ends and the reserved application instance module is no longer needed for that active session. In some embodiments of the present invention, such freed computing resources may be reallocated, for example, by inventory and reservation module 330 and / or scalar 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 reserved application instance modules no longer needed for inactive sessions.
[0059] The size of each or any of the multiple application instance module pools may be fixed or dynamic. For example, the size of an application instance module pool may be fixed such that a predetermined application instance module pool size number of pre-warmed application instance modules may be maintained within the pool. As pre-warmed application instance modules in an application instance module pool are allocated, the inventory and reservation module 330 and / or the scaler module 332 may 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 may be based, for example, on usage trends or other historical usage information for a particular application instance module. Thus, a frequently used application instance module may have a larger predetermined application instance module pool size number, and a less frequently used application instance module may have a smaller predetermined application instance module pool size number.
[0060] Additionally or alternatively, the size of the application instance module pool may be dynamic. In some embodiments of the present invention, the inventory and reservation module 330 and / or the scalar module 332 may monitor usage trends of each or any of the multiple application instance modules 310 in real time. For example, if the usage trend of a particular application instance module increases, the scalar module 332 may 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 greater usage, so that allocation of application instance modules can continue in real time without additional delays. Conversely, if the usage trend of a particular application instance module decreases, the scalar module 332 may 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 lower usage, so that computing resources are not unnecessarily over-utilized and can be allocated elsewhere. In such an embodiment, the size of each or any of the application instance module pools may be dynamically varied to accommodate periods of increased usage (e.g., usage spikes) and lulls in usage in order to maintain real-time application instance module allocation.
[0061] In some embodiments of the present invention, the inventory and reservation module 330 and / or the scalar module 332 may include a suitable predictive model or use a suitable machine learning / artificial intelligence technique to determine the application instance module pool size for multiple application instance module pools. For example, a machine learning model may be trained based on usage trend data for each supported application instance module and modify the application instance module pool size for the application instance module to minimize the amount of time to allocate the application instance module and maintain fast 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 application instance module usage trends change and evolve over time, for example, as monitored by the inventory and reservation module 330 and / or the scalar module 332.
[0062] In some embodiments of the present invention, the size of each application instance module pool in a subset of the plurality of application instance module pools may be fixed, while the sizes of other application instance module pools in the plurality of application instance module pools may be dynamic. For example, a highly used application instance module may be associated with a dynamic-sized application instance module pool, while a less frequently used application instance module may be associated with a fixed-sized application instance module pool. Additionally or alternatively, the size of a particular application instance module pool may be fixed at certain times and dynamic at other times. For example, for an application instance module that generally experiences less usage, the size of the corresponding application instance module pool may be fixed. However, during (e.g., intermittent) periods of higher usage (e.g., usage spikes), the size of the corresponding application instance module pool may be dynamic. The inventory and reservation module 330 and / or the scaler module 332 may switch the size of the application instance module pool back to fixed when the period of higher usage ends. In this manner, the inventory and reservation module 330 and / or the scalar module 332 can adapt to changing usage conditions as needed to maintain reduced allocation times for real-time allocation of application instance modules.
[0063] 3, one or more application instance module pools may be maintained within and with the plurality of application instance modules 310. However, in some embodiments of the present invention, each or any of the one or more application instance module pools may be maintained outside the plurality of application instance modules 310 but within or with the module controller 304 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 in the 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.
[0064] In some implementations of the present invention, each reserved and allocated application engine module and / or reserved and allocated application instance module may be associated with a different unique application engine module identification (ID) number or other suitable identifier (e.g., composed of numeric or alphanumeric characters, etc.) that uniquely identifies the reserved and allocated application engine module and / or reserved and allocated application instance module during the active session. The module ID may be used, for example, by session management controller 140 to track and manage the reserved and allocated application engine module and / or reserved and allocated application instance module during the active session to ensure that communications from client device 148 during the active session are addressed and forwarded to the correct application engine module or application instance module, and vice versa. In one embodiment, upon completion of the active session, session information module 156 may send an appropriate message to session management controller 140 so that session management controller 140 can disconnect the active session and deregister the application engine module or application instance module used during the active session. In some embodiments of the present invention, any and all 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 or otherwise used by a reservation application engine module or a reservation application instance module during an active session can be stored (e.g., stored in database 146), retrieved, and used by the user in subsequent active sessions. When 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.
[0065] In some implementations of the present invention, cloud-based client application platforms 100, 200, and 300, shown in FIGS. 1, 2, and 3, respectively, may include one or more cloud-connected client application controllers 160. According to an embodiment, cloud-connected client application controller 160 may be any suitable type of device capable of receiving and transmitting user input to control cloud-based client applications running in application engine modules. For example, in a mobile gaming context, cloud-connected client application controller 160 may be a game console controller or the like, although other types of cloud-connected client application controllers 160 are possible. Cloud-connected client application controller 160 may include a user input interface 162 for receiving user input from a user and transmitting such user input to server system 102 to control cloud-based client applications running in application engine modules or application instance modules. In one embodiment, neither cloud-connected client application controller 160 nor user input interface 162 includes a display, keyboard, or the like, sometimes referred to as a “headless device.” For example, the cloud-connected client application controller 160 may communicate with or otherwise remotely connect to a client device 148, and the display module 152 of the client device 148 may be used to display video and / or audio information streamed from a cloud-based client application running within a corresponding application engine module or application instance module executing on the server system 102.In one embodiment, the video / audio output of a cloud-based client application running on an application engine module or application instance module may be streamed in real time over the Internet (or other suitable network) to a browser module 150 on a client device 148 and displayed to a user via a display module 152. The display module 152 may receive the video / audio output from the application engine module (or application instance module) via a video / audio communication module 132. A user may interact with the video / audio stream of the cloud-based client application in real time using a cloud-connected client application controller 160 instead of an interaction capture module 154 on the client device 148. In one embodiment, the user's input may be collected by the cloud-connected client application controller 160 and communicated (over the Internet or other suitable network) to an application engine module within the plurality of application engine modules 106 or 206 (or an application instance module within the plurality of application instance modules 310) assigned to the user's session via a controller signaling communication module 164. For example, the controller signaling communication module 164 may be a suitable wireless network access point (e.g., a Wi-Fi access point, etc.), network gateway, or other suitable network communication portal that can communicate with the server system 102 via the Internet or other suitable network connection.The user's input from cloud-connected client application controller 160 may then be mapped to video / audio streams by a state module of the assigned application engine module or application instance module, allowing the user to (remotely) control and interact with the cloud-based client application in real time as if the cloud-based client application were running locally and natively on client device 148. However, in alternative embodiments, cloud-connected client application controller 160 may include either a display or a keyboard, or both, such as within or associated with user input interface 162.
[0066] In embodiments, user input interface 162 may include any suitable number of buttons or keys (e.g., A, B, X, Y buttons and / or up, down, left, right, etc. arrows) in any suitable configuration. For example, user input interface 162 may include one or more button layouts, each including any suitable number of buttons or keys in any suitable configuration. For example, a button layout may resemble a game console controller, such as having two analog sticks, a directional pad (“D-pad”), four right-side input buttons, four shoulder buttons, and two triggers. User input interface 162 may additionally or alternatively include menu, function, and back paddle inputs, although other combinations of buttons, triggers, paddles, joysticks, etc. are possible. The configuration of the one or more button layouts depends, for example, on the types of cloud-based client applications available on cloud-based client application platform 100 and how those cloud-based client applications can be controlled by cloud-connected client application controller 160.
[0067] In an embodiment, by remotely connecting the cloud-connected client application controller 160 to the server system 102 to receive and transmit user input rather than through the client device 148, signal latency between the cloud-connected client application controller 160 and the server system 102 can be substantially reduced. The cloud-connected client application controller 160 can include appropriate electronics, such as, for example, a wireless network chip, a microprocessor, and / or other appropriate electronic components capable of initiating and managing a wireless network connection with the server system 102. In one embodiment, a user on the go can choose to connect the cloud-connected client application controller 160 via a wireless hotspot or the like supported by the controller signaling communication module 164. In addition to cloud connectivity, the cloud-connected client application controller 160 can offer a local connectivity mode to interface with cloud-based client applications or applications running on the client device 148 itself, or otherwise interface with participating client devices 148. Such modes can be user-selectable or automatic, depending on preference. For example, external factors such as the presence of a wireless connection within range of the client device 148 or the host Bluetooth® device can be used to determine the connection mode of the cloud-connected client application controller 160 in an appropriate manner that is completely transparent to the user.
[0068] Some embodiments of the present invention can overcome the challenges of remote connectivity using a cloud-connected client application controller 160 that does not have a display and / or keyboard. For example, the use of IoT and / or home automation technologies allows for various pairing methods that are not dependent on having a display. For example, once the cloud-connected client application controller 160 accesses an Internet-enabled wireless or other remote connectivity access point via the controller signaling communication module 164, it can wirelessly pair and connect with the server system 102 using various methods. By way of example and not limitation, Wi-Fi provisioning is the process of connecting a new Wi-Fi device to a Wi-Fi network. The Wi-Fi provisioning process can include loading the cloud-connected client application controller 160 with the network name (often referred to as the service set identifier or SSID) and its security credentials. Provisioning allows the cloud-connected client application controller 160 to connect to the server system 102 or to an appropriate edge network that communicates with the server system 102 without going through the client device 148, and the cloud-connected client application controller 160 can connect to and communicate with multiple application engine modules 106 in the application engine module controller 104 or multiple application instance modules 310 in the module controller 304 to reduce latency, manage load balancing and server resources, etc. Various Wi-Fi provisioning methods can be supported by the cloud-connected client application controller 160 and the server system 102.
[0069] For example, in some embodiments of the present invention, the cloud-connected client application controller 160 can use access point (AP) mode. AP mode is the most common provisioning method for headless devices. In AP mode, an unprovisioned device (e.g., the cloud-connected client application controller 160) can initially wake up as a Wi-Fi AP with an SSID defined, for example, by the device manufacturer. In such mode, the unprovisioned device can also include a secure built-in web server. A user can connect the client device 148 to the unprovisioned device's AP and use the browser module 150 to browse the unprovisioned device's website via a predefined local URL or IP address. The embedded website allows the user to select (or enter) a wireless network name and password. The cloud-connected client application controller 160 can store network credentials, such as in non-volatile memory, and then switch from AP mode to station mode to connect to a wireless network using the stored network credentials (e.g., via the controller signaling communication module 164). A key advantage of AP mode provisioning is the ability to utilize various features that may be present in the client device 148.
[0070] Additionally or alternatively, in some implementations of the present invention, the cloud-connected client application controller 160 can use out-of-band provisioning. Out-of-band provisioning methods can use non-Wi-Fi mediums to deliver network information to provisioned devices (e.g., the cloud-connected client application controller 160). Out-of-band provisioning can be wired (e.g., using a USB interface) or wireless (e.g., using near-field communication (NFC) radio or Bluetooth). In one embodiment, the cloud-connected client application controller 160 can include a suitable NFC chip or the like, allowing NFC-based out-of-band provisioning to be used for the cloud-connected client application controller 160. Adding out-of-band provisioning to the cloud-connected client application controller 160 may increase solution cost, but can add robustness and flexibility.
[0071] Additionally or alternatively, in some embodiments of the present invention, the cloud-connected client application controller 160 can use Wi-Fi Easy Connect. Wi-Fi Easy Connect can simplify device configuration by enabling zero-touch connection to a Wi-Fi network (e.g., via the controller signaling communication module 164) using a QR code, an NFC tag, or device information downloaded from the cloud. The client device 148 can be used to manage network access. With Wi-Fi Easy Connect, a user can use the client device 148 to scan a QR code or an NFC tag on an AP (e.g., the controller signaling communication module 164) to establish a wireless network. The user can then use the client device 148 to scan the QR code or NFC tag on the cloud-connected client application controller 160 to provision and register the device. The cloud-connected client application controller 160 can then seamlessly connect to the wireless network via the controller signaling communication module 164.
[0072] Additionally or alternatively, some implementations of the present invention may use Wi-Fi Protected Setup (WPS). WPS is a standard for provisioning headless devices. In one embodiment, the cloud-connected client application controller 160 may be WPS-enabled. In the WPS Push-Button-Connect (PBC) method, a user can press a button on both the AP (e.g., the controller signaling communication module 164) and the cloud-connected client application controller 160. Once the AP button is pressed, the cloud-connected client application controller 160 is free to join the network for two minutes. A drawback of such a method is that beyond the two-minute lack of security, the user must have physical access to the AP. If the AP is located in a difficult-to-reach location, such a method may be cumbersome.
[0073] Additionally or alternatively, in some embodiments of the present invention, cloud-connected client application controller 160 can use Wireless Accessory Configuration (WAC). The WAC method is an Apple MFi-licensed technology designed for MFi accessories that can connect to an iPod®, iPhone®, or iPad® (i.e., client device 148). MFi accessories that support WAC can be easily configured by an iPod®, iPhone®, or iPad® (i.e., client device 148) without the user needing to enter a wireless network name or password.
[0074] Additionally or alternatively, in some embodiments of the present invention, the cloud-connected client application controller 160 can use SmartConfig technology. SmartConfig technology is a Texas Instruments (TI) proprietary provisioning method designed for headless devices. It uses an iOS or Android mobile application (e.g., running on the client device 148) to broadcast network credentials from the client device 148 to an unprovisioned TI Wi-Fi device (e.g., the cloud-connected client application controller 160). The Wi-Fi network name (SSID) to which the client device 148 is connected can automatically appear on the iOS or Android mobile application. The user can then add a network password and press a “Start” button to begin the process. After the network credentials are picked up by the cloud-connected client application controller 160, the cloud-connected client application controller can automatically connect to the wireless network (e.g., via the controller signaling communication module 164) and send a service discovery message back to the client device 148. However, using iOS or Android® mobile apps, which may need to be approved by the respective mobile app stores, may reintroduce the same platform limitations that embodiments of the present invention seek to mitigate. Other methods of over-the-air network provisioning are possible.
[0075] In embodiments, the cloud-connected client application controller 160 can be used to reduce and improve signal latency, but it can also support techniques for reducing packet loss. Data is transmitted over networks between sources and destinations on the Internet or any other packet-switched network in small units called packets. Network packets can carry small amounts of data, which can include information such as source and destination addresses, protocols, or identification numbers. If packets fail to reach their destination due to data transmission errors or network congestion, end users may experience disruptions such as delayed service or loss of network connectivity. Packet loss can contribute to poor communication quality, reduced throughput, insecure communications, and other similar problems. For example, real-time applications may experience jitter and frequent gaps in received audio. In the worst case, packet loss can cause severe multiplexing of received data, disassembled images, unintelligible voice, or even a complete lack of received signal. Packet loss of less than about 2% can be noticeable in some scenarios, while packet loss of up to about 10% can be tolerated in other scenarios. Packet loss in multiplayer online games has been a consistent problem not only from the receiving end but also from the sending end. For example, poor connection quality can cause affected users' avatars to skip, disappear, lag, or jitter from other users' perspectives, disrupting gameplay. Some users even abuse this phenomenon to gain an edge when gaming online. In the cloud-based client application platform 100, packet loss can result in a variety of problems. For example, not only can it delay user input, but the return video stream can be interrupted as well. While affected users may experience input delays, the cloud-based client application can continue to run in the application engine module on the server system 102, as if the user were providing zero input.Such issues can significantly impact enjoyment, exacerbate latency issues that may already exist, and impact the benefits provided by cloud-connected client application controller 160.
[0076] To address such packet loss issues according to some embodiments of the present invention, the server system 102 can use appropriate artificial intelligence or machine learning techniques to observe and develop predictive models of user control inputs when encountering specific cloud-based client application functions. Such predictive models can be used to smooth out any momentary loss of data from user control inputs. For example, the artificial intelligence / machine learning techniques can build models based on typical user reaction times, common errors users make, responses to stimuli in the cloud-based client application, etc. Such techniques can also be deployed to reduce perceived delays over unstable connections, which can be particularly important when the cloud-based client application platform 100 is deployed among multiple users interacting together online.
[0077] In one embodiment, the cloud-connected client application controller 160 can make any client device 148 with a web browser effective as a gaming system or other similar system tailored to a particular cloud-based client application or genre of cloud-based client application. For example, the cloud-connected client application controller 160 can serve as or be associated with a unique identification or identifier for loading profile information or other appropriate information or data associated with the user and / or the cloud-connected client application controller 160 from, for example, the database 146 of the server system 102 during a Wi-Fi provisioning process. For example, the cloud-connected client application controller 160 can store in on-board memory a unique identifier (e.g., an alphanumeric identification, etc.) that can be provided to the server system 102 during the provisioning process. Upon successful completion of the provisioning process, the server system 102 can retrieve the profile information or other data associated with the identifier from the database 146 and transmit such information to the cloud-connected client application controller 160 and / or the user's client device 148 (e.g., via the controller signaling communication module 164). The server system 102 may use the identifier to control various aspects of the browser module 150, the information displayed to the user via the browser module 150, and / or the cloud-based client applications displayed via the browser module 150. For example, the server system 102 may display a list of recommended cloud-based client applications to the user on the display module 152 of the client device 148, such as a list of cloud-based client applications that can be used with the cloud-connected client application controller 160.As previously mentioned, cloud-connected client application controllers 160 can have different button layouts or configurations. In one embodiment, depending on the particular button layout of a particular cloud-connected client application controller 160, the identifier can cause server system 102 to display, on display module 152 of browser module 150, a list of recommended cloud-based client applications suitable for use with that particular configuration of cloud-connected client application controller 160. For example, if one or more button layouts are configured in a manner similar to a game console controller, server system 102 can communicate a command to browser module 150 to display, on display module 152, a list of recommended cloud-based games similar to game console games. In one embodiment, server system 102 can maintain such a list in database 146 and communicate the list to client device 148 for display.
[0078] Additionally or alternatively, the server system 102 can use the identifier to generate and display any suitable type of recommendation list and / or user experience customization / personalization (e.g., by accessing information via a lookup table or key-value pairs stored in database 146 that are referenced or otherwise accessed based on the identifier). As a result, the server system 102 can tailor the user experience in the browser module 150 in any suitable manner by modifying graphical information displayed in the browser module 150 within and / or outside of the cloud-based client application. For example, the server system 102 can use the identifier to look up a user profile or preferences and tailor or otherwise customize the user experience to the user's preferences via the browser module 150. By way of example and not limitation, the graphical user interface of a cloud-based client application game can be personalized to display, for example, user incentives, special offers, advertisements, etc. to the user within or within the cloud-based client application and / or within or associated with the browser module 150. In an embodiment, different user incentives, special offers, advertisements, etc. may be displayed to a user within a cloud-based client application based on characteristics associated with cloud-connected client application controller 160, such as its type and / or configuration, although other characteristics are possible. Additionally or alternatively, the cloud-based client application may personalize prizes, rewards, and / or gifts that are displayed or presented to a user in, for example, an associated gift store of the cloud-based client application.For example, a user using one type of cloud-connected client application controller 160 may be presented with different prizes / rewards / gifts than another user using a different type of cloud-connected client application controller 160. In this manner, a menu or list of prizes, rewards, and / or gifts may be tailored to each user or any user within an associated gift store displayed in the cloud-based client application. Additionally or alternatively, the server system 102 may personalize graphical information displayed to a user outside of the cloud-based client application, such as, for example, advertisements or offers presented to a player in the browser module 150 outside of the cloud-based client application. Other personalizations and customizations are possible for graphical user interfaces within and / or outside of the cloud-based client application.
[0079] In one embodiment, the server system 102 can be configured to support account profiles. For example, a user can create an account profile within a cloud-based client application and / or via the browser module 150, which can be used to store (e.g., store in the database 146) user preferences, such as a preferred cloud-based client application, whether the user wants to be presented with recommendations, and, if so, the type and variety of recommendations. Upon provisioning and connection, the server system 102 can communicate commands to the cloud-based client application and / or the browser module 150 to present their personalization, customization, preferences, and the like to the user. For example, the server system 102 can maintain a record of the last cloud-based client application used by the user. Accordingly, the server system 102 can communicate one or more commands to the application engine module controller 104 or the module controller 304 to initiate the execution of one or more other cloud-based client applications for display in the browser module 150 of the user's client device 148, such as the last cloud-based client application used by the user or the cloud-based client application most recently used by the user. Such control by the server system 102 can be performed during the initial setup of the cloud-connected client application controller 160 or at any time while the cloud-connected client application controller 160 is being used by a user.
[0080] In one embodiment, cloud-connected client application controller 160 may communicate any suitable type of information to server system 102, such as, for example, when cloud-connected client application controller 160 is being used by a user, the length of time the user uses cloud-connected client application controller 160, the length of time the user interacts or engages with the cloud-based client application via cloud-connected client application controller 160, and other similar information that may be collected from the user and processed by server system 102 to improve the user experience, for example, by tracking engagement and fairness metrics. In one embodiment, in the case of a competitive skill-based cloud-based client application (e.g., a cloud-based competitive mobile game), such information may be used to match users using cloud-connected client application controller 160 with other users also using cloud-connected client application controller 160 to help ensure competitive fairness and / or to implement anti-fraud / anti-cheat measures. For example, one user utilizing a cloud-connected client application controller 160 may have an unfair advantage (e.g., reduced latency, reduced packet loss) in competition with other users not utilizing a cloud-connected client application controller 160. By way of example and not limitation, the server system 102 may monitor and receive gameplay characteristics or attributes of a user. These characteristics, attributes, or statistics may include, for example, whether the user is using a cloud-connected client application controller 160 for a cloud-connected client application. The server system 102 may compare the monitored characteristics with historical characteristics associated with the user (e.g., stored in and retrieved from database 146) to detect fraudulent behavior. Deviations in gameplay characteristics from the historical characteristics may indicate fraudulent behavior.For example, fraudulent behavior may include cheating (e.g., using a cloud-connected client application controller 160 to play a skill-based, cloud-based competitive mobile game against a player not using such a controller).
[0081] Additionally or alternatively, users in a competition may be matched based on factors that may include characteristics associated with the cloud-connected client application controller 160, such as the type of cloud-connected client application controller 160 being used, the configuration of the cloud-connected client application controller 160 being used (e.g., button layout configuration), the latency and / or packet loss associated with the cloud-connected client application controller 160, and / or simply the fact that the cloud-connected client application controller 160 is being used by the user. However, other characteristics of the cloud-connected client application controller 160, the user, the cloud-based client application, etc., may be used for purposes of matching users, such as in a cloud-based client application competition on the cloud-based client application platform 100, 200, or 300. Additionally or alternatively, appropriate machine learning / artificial intelligence techniques may be used to match players. For example, a machine learning model may be trained based on data from all users in the cloud-based client application. The machine learning model may then be used to dynamically match users for a competition or tournament in the cloud-based client application. The machine learning model can be updated or otherwise adapted as user characteristics evolve over time (e.g., changes in win-loss ratios and experience level, favoring certain matches or tournaments in a cloud-based client application and disfavoring others, etc.).
[0082] In some embodiments of the present invention, a cloud-based client application (running 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 at any particular or desired location, point in time, or time during an active session with the cloud-based client application (e.g., by pressing an appropriate “pause” button displayed to the user in or along with the browser application). Additionally or alternatively, the cloud-based client application can be paused if the connection between the browser module 150 and the server system 102 is interrupted or lost during an active session. Additionally or alternatively, the cloud-based client application can be paused if the user leaves the active session (e.g., by pressing the browser’s “back” button or closing the browser application). In some embodiments of the present invention, the client device 148 (e.g., within or associated with the browser module 150) can store one or more appropriate cookies that the browser module 150 can check to determine whether there is an active session 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 resume 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 the appropriate "play" button, "forward" button displayed to the user within or along with the browser application, or by reopening the browser application).In one embodiment, an active session may be left 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 if the user exits or disconnects the active session. After the predetermined period of time expires, the active session may be terminated and the application engine module or application instance module may be deregistered. If the user wishes to continue the active session before the expiration of the predetermined period of time, the user may rejoin the previously assigned and reserved application engine module or application instance module by, for example, pressing a "play" button, refreshing a web page within a browser application, or selecting the same URL, link, or hyperlink used to initiate the original active session. In some implementations of the present invention, an active session may be left open or otherwise maintained indefinitely until the user exits or otherwise terminates the active session.
[0083] By maintaining the state of the reservation application engine module or reservation application instance module and the cloud-based client application during such suspension, some embodiments 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 in time, or time, and then continue the active session on one or more other (different) client devices 148 from the paused location, point in time, or time. By way of example and not limitation, a user may request to start an active session on a first client device 148 (e.g., a smartphone). The user may then pause the active session at a particular or desired location, point in time, or time (e.g., by closing the browser application on the first client device 148). The state of the cloud-based client application may be saved in a state module of the application engine module or application instance module assigned and registered to the active session. The user may then switch to a second client device 148 (e.g., a desktop computer) and select (via a display module 152 within a browser module 150 launching 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 resume the active session in 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 in time, 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 (e.g., by pressing an appropriate “play” button within a browser application) from the paused location, point in time, or time in the same or similar manner as if the user had continued to interact with the cloud-based client application on the first client device 148. 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. The session management controller 140 can use both the user ID and 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 to identify the correct (paused) application engine module or application instance module to reassign to the second client device 148 to enable the user to continue the active session on the second client device 148 from the same location, point in time, or time where the user 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 of continuing the same active session on the cloud-based client application from the same pause position, point, or time, or starting a new active session on the cloud-based client application.
[0084] In the event of a shutdown or crash of an application engine module or application instance module during an active session, session management controller 140 can reserve and allocate a new application engine module or a new application instance module to the user (depending on which was being used for the active session at the time of the shutdown or crash). The cloud-based client application running on the application engine module or application instance module can be populated with information from the previous (pre-shutdown / pre-crash) active session (e.g., using the cloud-based client application state and other session information retrieved from database 146) to reflect the state of the cloud-based client application at the time immediately prior to the shutdown or crash, so that it appears to the user that the active session was simply paused. The user can then return to and re-engage with the active session in the manner described above.
[0085] In some embodiments 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 network communications between the client device 148 and the server system 102 during an active session and communicate such latency information to the session management controller 140 (e.g., via the session information module 156). If the network latency exceeds a predetermined or dynamic threshold (e.g., based on network latency trends, usage trends, etc.), the network latency information may be used to temporarily suspend the active session 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 may 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 may 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, etc. of the streamed video / audio media data to maintain smooth display and interaction for cloud-based client applications on the client device 148 during an active session (e.g., to maintain smooth gameplay on the client device 148 in the context of a cloud-based mobile game), so that the active session does not need to be paused or otherwise interrupted. The video / audio communication module 132 may periodically or continuously update the quality and / or characteristics of the video / audio media data stream throughout the active session (e.g., lowering and / or increasing the frame rate, resolution, etc. of the video / audio media data stream as the network connection quality fluctuates 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 applications for the user.
[0086] Additionally or alternatively, network latency information can be used by session management controller 140 to determine and select an appropriate application engine module or application instance module for a user. For example, in some embodiments of the present invention, server system 102 can include multiple application engine module controllers 104, each managing a respective one of multiple application engine modules 106 to form one or more application engine module clusters, as shown and described with respect to FIG. 1 and FIG. 2. In some embodiments of the present invention, server system 102 can include multiple module controllers 304, each managing a respective one of multiple application engine modules 206 to form one or more application engine module clusters and / or managing a respective one of multiple application instance modules 310 to form one or more application instance module clusters, as shown and described with respect to FIG. 3. The application engine module clusters and / or application instance module clusters can be geographically distributed such that each of the respective one of multiple application engine modules 106 or 206 and / or each of the respective one of multiple application instance modules 310 can 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 allocate an application engine module or application instance module that is geographically closest to the user's client device 148 or that otherwise has the least network latency.By measuring and monitoring network latency information for all client devices 148, the server system 102 can create, for example, a heat map of network latency across the cloud-based client application platform 100, 200, or 300, which can be used to reserve and assign optimal application engine modules or optimal application instance modules to each user (e.g., optimal in terms of network latency or network connection quality) to maintain smooth display and interaction of cloud-based client applications on the client devices 148 during each active session.
[0087] Because cloud-based client applications can be launched remotely within the server system 102 and displayed on any suitable client device 148, according to embodiments, the present invention can also enable integration of cloud-based client applications into third-party platforms, including third-party websites and applications, by embedding or otherwise providing URLs or links or hyperlinks to one or more cloud-based client applications in the third-party platforms. Such integration can enable those third parties to more easily provide different features and functionality through integrated cloud-based client applications that complement and enhance interaction and engagement with those third-party platforms. By way of example and not limitation, a retailer can incorporate any suitable cloud-based client application into a consumer touchpoint by embedding or otherwise providing a URL or other link or hyperlink to the cloud-based client application. For example, a retailer can incorporate a cloud-based mobile game into the retailer's website or application according to embodiments of the present invention. A user can interact with the cloud-based mobile game on 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 an integrated cloud-based mobile game, the user may receive a prize in the retailer's own currency (e.g., loyalty, coupons, product / service discounts, free merchandise, etc.) Prize information may be communicated from the integrated cloud-based mobile game to a third-party platform (e.g., via the server system 102) and maintained on the retailer's website or application for use by the user.For example, fast food restaurants can integrate cloud-based mobile games into their websites or applications in accordance with embodiments of the present invention. Users can select and engage with the integrated cloud-based mobile game via the website or application, for example, by selecting an appropriate embedded or otherwise provided URL or other link or hyperlink to the integrated cloud-based mobile game and then (remotely) interacting with the integrated cloud-based mobile game. If the user wins the integrated cloud-based mobile game, the user can receive a free side order of food (or other suitable prize or offer appropriate to the retailer) that can be redeemed at the fast food restaurant. If the user loses, the user can compete again, be awarded a smaller prize, be given another opportunity to play, and so on. The present invention can support the integration of any suitable type of cloud-based client application with any suitable third-party platform. According to the present invention, by allowing users to interact with a cloud-based client application integrated with a third-party website or application via the third-party website or application, the third party can increase user engagement metrics with the third-party platform without requiring the user to download and install the cloud-based client application on the user's client device 148.
[0088] Integrating one or more cloud-based client applications with a third-party platform may allow for a tailored experience to be provided to users on the third-party platform that may not be available to the general public 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 may provide features, functionality, interface modifications, etc. 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, users who interact with the integrated cloud-based mobile game may have access to special or promotional tournaments that are not available to general users of the cloud-based mobile game. Additionally or alternatively, users who interact with the integrated cloud-based client application may 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, users who interact with the integrated cloud-based client application may be presented with modified or improved user interfaces (e.g., different screens, customizations, third-party branding, 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 (including modifications to the internal and / or external graphical user interfaces of the integrated cloud-based client application) are possible to support third-party platforms.
[0089] In some implementations of the present invention, data collected from users interacting with the integrated cloud-based client application may additionally or alternatively be used to tailor the user experience of the integrated cloud-based client application. In one embodiment, the features, functions, and capabilities of the integrated cloud-based client application on the third-party platform may be targeted to individual users based on third-party platform user data, data from or associated with the user's client device 148, etc. For example, the server system 102 may identify each user's geographic location via the client device's 148 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), etc. A user accessing the integrated cloud-based client application from one geographic location (e.g., a first state or region) may be presented with a different user experience than a user accessing the integrated cloud-based client application from a different geographic location (e.g., a different state or region). The different user experience may include, for example, a different user interface, different tournaments (e.g., in connection with a cloud-based mobile game), different features and functionality, etc. For example, if the integrated cloud-based client application is a cloud-based mobile game, the user data may be used to match players of the integrated cloud-based mobile game, e.g., in the case of a competitive skill-based integrated cloud-based mobile game, the user information may be used to match users to other users interacting with the integrated cloud-based mobile game, rather than to users of the general population of the (non-integrated) cloud-based mobile game.Such player matching can help ensure fairness of competition and / or enforce anti-fraud / anti-cheat 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.
[0090] Some embodiments of the present invention can be used to integrate cloud-based client applications into online or digital advertising. By way of example and not limitation, cloud-based mobile games can be integrated into digital advertising to create interactive advertising units, such as playable ads. In some embodiments 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 in the playable ad. Alternatively, the cloud-based mobile game can automatically start within the playable ad upon presenting, presenting, or displaying the playable ad to a user. Users can interact with the integrated cloud-based mobile game within and through the playable ads to earn prizes, promotions, and other similar rewards, for example, as part of a digital advertising campaign. In one embodiment, such rewards can be used in the cloud-based mobile game itself (e.g., virtual currency or rewards) to encourage users to interact with the playable ads. For example, users can use such rewards to make in-app purchases or for other types of redemptions or purchases within the integrated cloud-based mobile game itself while interacting with the playable ad. In alternative embodiments, such rewards may be used for or in conjunction with another application or website associated with the digital advertising campaign to drive user engagement. However, any suitable cloud-based client application may be integrated with a digital advertisement to create an interactive advertising unit. For example, an interactive advertising unit or other digital advertisement of a cloud-based client application product may include a trial version (or may be a fully-active but time-limited version) of the cloud-based client application product integrated with the interactive advertising unit or other digital advertisement.As a result, users can engage with and evaluate cloud-based client application products (e.g., within interactive advertising units or through other digital advertisements) without waiting to download, install, or otherwise purchase the cloud-based client application product before evaluating it. FIG. 4 is a block diagram illustrating an example method 400 for remotely controlling a cloud-based client application using, for example, the server system 102 and the cloud-connected client application controller 160, according to an embodiment of the present disclosure. At block 405, the server system 102 may receive a first request from a client device (e.g., the client device 148) of a first user to initiate an interactive session with the cloud-based client application. The first request may include one or more characteristics of at least one of the first user and the client device. The cloud-based client application may be configured to run on a cloud-based computing platform (e.g., the server system 102) different from the client device. At block 410, the server system 102 may reserve an application engine module (e.g., from multiple application engine modules 106) for executing the cloud-based client application remotely from the client device in response to the first request. An application engine module may be bound to a first user for the duration of an interactive session. In one embodiment, each application engine module may be reserved for one user, such that each application engine module may be used by at most a single (bound) user during an interactive session.At block 415, the server system 102 may receive a second request from the first user's client application controller (e.g., cloud-connected client application controller 160) to connect (e.g., wirelessly via Wi-Fi, etc.) to the server system 102 for an interactive session, separate or otherwise independent of the client device (e.g., client device 148). At block 420, the server system 102 may connect to or otherwise initiate communication with the first user's cloud-connected client application controller (e.g., cloud-connected client application controller 160) separately from the client device (e.g., client device 148) based on connection information (e.g., networking credentials, etc.) provided to the server system 102 in the second request. At block 425, the server system 102 may modify the cloud-based client application running in the application engine module based on one or more characteristics of at least one of the first user and the client device. In some implementations of the present invention, one or more characteristics of the first user and / or client device may be used to modify a cloud-based client application executing in an application engine module (e.g., logged-in state, etc.). At block 430, the server system 102 may execute the modified cloud-based client application in the application engine module. At block 435, the server system 102 may stream media data from the modified cloud-based client application to a browser application or other suitable application (e.g., browser module 150) executing on the first user's client device.At block 440, the server system 102 may receive interaction data from a client application controller (e.g., cloud-connected client application controller 160) when a first user engages with streamed media data from the modified cloud-based client application via a browser application. At block 445, the server system 102 may receive a third request from the client device to terminate the interactive session with the modified cloud-based client application. In some implementations of the present invention, the third request may be the termination of a stream to which the client device is connected, rather than a specific request from the client to terminate the interactive session. At block 450, the server system 102 may deregister or deallocate the application engine module in response to the second request and disconnect or otherwise cease communication with the client application controller (e.g., cloud-connected client application controller 160) and the client device (e.g., client device 148). In one embodiment, the application engine module may be deregistered or deallocated from inventory, and the processors and processes supporting the application engine module may be spun down or otherwise terminated to prevent the application engine module from being reused by multiple users. In an alternative embodiment, the application engine module may be unbound from the first user and available for use by a second (or subsequent) user.
[0091] Thus, in some implementations of the present invention, by connecting the cloud-connected client application controller to the cloud-based client application platform rather than to the user's device, the cloud-connected client application controller can provide user input to the cloud-based client application platform, significantly reducing signal latency. Furthermore, embodiments of the present invention can improve network efficiency by not requiring a user's client device to download and install numerous (e.g., tens, hundreds, or more) different client applications with which the user may want to interact. Instead, the present invention can improve network traffic and network bandwidth utilization because it is video / audio data and user input that is communicated between the server system 102 and the client device 148 and cloud-connected client application controller 160, rather than the entire client application itself. Furthermore, the present invention can reduce computer storage requirements on both the client and server sides. For example, users are not required to download and install every cloud-based client application on and for their client device. 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 and distributed from any type of client device, instead of having to store numerous different versions of the client application to support numerous client devices.
[0092] Embodiments of the present invention may also improve the processing efficiency of client device 148 because client device 148 can process video / audio data from cloud-based client applications more quickly and efficiently than if the entire client application itself were to run natively on the client device. Embodiments of the present invention may also improve the processing efficiency of server system 102. Rather than maintaining the continuous execution of cloud-based client applications and computing resources to support them on server system 102, server system 102 may allocate computing resources when application engine modules and / or application instance modules are registered for an active session and deallocate those resources when the active session is completed. In other words, server system 102 may register and deregister application engine modules and / or application instance modules as needed, respectively, without having to continuously maintain and process each cloud-based client application for each client device. As a result, server system 102 can more effectively allocate computing resources to application engine modules and / or application instance modules that are in use (and cloud-based client applications that run in those application engine modules or as application instances), and away from application engine modules and / or application instance modules that are not in use. In some embodiments of the present invention, pre-warming of application engine modules within an application engine module pool and / or application instances within an application instance pool can also substantially reduce response times for establishing an active session.Thus, embodiments of the present invention can manage users of active sessions at scale to maintain instant (or near-instant) launch and interaction with cloud-based client applications (e.g., "instant play" in the context of cloud-based mobile gaming), particularly when there are, for example, hundreds or thousands of cloud-based client applications and millions, tens of millions, or more users simultaneously interacting with those cloud-based client applications.
[0093] FIG. 5 is a block diagram of an example computing device 500 capable of performing one or more of the operations described herein, according to embodiments. The computing device 500 may be connected to other computing devices within a LAN, an intranet, an extranet, and / or the Internet. The computing device 500 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 500 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 a set of instructions (sequential or otherwise) that specify actions to be taken by that machine. Furthermore, while only a single computing device 500 is shown, the term “computing device” should also be interpreted to include any collection of computing devices that individually or together execute a set (or sets) of instructions to perform the methods described herein.
[0094] The exemplary computing device 500 may include a computer processing device 502 (e.g., a general-purpose processor, an ASIC, etc.), a main memory 504, a static memory 506 (e.g., a flash memory, etc.), and a data storage device 508, which may communicate with each other via a bus 530. The computer processing device 502 may be provided by one or more general-purpose processing devices, such as a microprocessor, a central processing unit, etc. In an illustrative example, the computer processing device 502 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 502 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, etc. The computer processing device 502 may be configured to perform the operations described herein in accordance with one or more aspects of the present disclosure to perform the operations and steps described herein.
[0095] Computing device 500 may further include a network interface device 512 that may communicate with a network 514. Data storage device 508 may include a machine-readable storage medium 528 that may store one or more sets of instructions, such as, for example, instructions for performing the operations described herein, according to one or more aspects of the present disclosure. Instructions 518 that implement core logic instructions 526 may also reside, completely or at least partially, within main memory 504 and / or within computing device 502 during execution of the instructions by computing device 500, main memory 504, and computing device 502, which also constitute computer-readable media. Instructions may further be transmitted or received over network 514 via network interface device 512.
[0096] Although the machine-readable storage medium 528 is shown to be a single medium in the illustrative example, the term "computer-readable storage medium" should be interpreted to include a single medium or multiple media (e.g., a centralized or distributed database and / or associated caches and servers) that store one or more sets of instructions. The term "computer-readable storage medium" should also be interpreted to include any medium that can store, encode, or carry a set of instructions for execution by a machine, causing the machine to perform the methods described herein. Thus, the term "computer-readable storage medium" should be interpreted to include, but is not limited to, solid-state memory, optical media, magnetic media, etc.
[0097] Embodiments of the subject matter and operations described in this disclosure may be implemented in digital electronic circuitry, or computer software, firmware, or hardware, including the structures disclosed in this disclosure and their structural equivalents, or one or more combinations thereof. Embodiments of the subject matter described in this disclosure may 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 apparatus. Alternatively or additionally, the program instructions may be encoded in an artificially generated propagated signal, e.g., a machine-generated electrical, optical, or electromagnetic signal generated to encode information for transmission to a suitable receiving device for execution by the data processing apparatus. The computer storage medium may be, or may be included in, a computer-readable storage device, a computer-readable storage substrate, a random-access or serial-access memory array or device, or one or more combinations thereof. Furthermore, while a computer storage medium is not a propagated signal, a computer storage medium can be a source or destination of computer program instructions encoded in an artificially generated propagated signal. A computer storage medium may also be, or may be contained in, one or more separate physical components or media (e.g., multiple CDs, disks, or other storage devices).
[0098] The operations described in this disclosure may be implemented as operations performed by a data processing apparatus on data stored in one or more computer-readable storage devices or received from other sources.
[0099] The term "data processing apparatus" encompasses all kinds of apparatus, devices, and machines for processing data, including, by way of example, a programmable processor, a computing device, a computer, a system-on-chip, or a plurality or combination of the above. A computing device may include one or more processors, which may include special-purpose logic circuits, such as a field-programmable gate array (FPGA) or an application-specific integrated circuit (ASIC), a central processing unit (CPU), or a multi-core processor. In addition to hardware, an apparatus may also include code that creates an execution environment for the computer program in question, such as code constituting processor firmware, a protocol stack, a database management system, an operating system, a cross-platform runtime environment, a virtual machine, or one or more combinations thereof. The apparatus and execution environment may implement a variety of different computing model infrastructures, such as web services, distributed computing, and grid computing infrastructures.
[0100] 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, declarative, procedural, or functional, and can be deployed in any form, either 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 does not necessarily, correspond to a file in a file system. A program can be stored as part of a file that holds other programs or data (e.g., one or more scripts stored in markup language resources), in a single file dedicated to the program in question, or in multiple cooperating files (e.g., files storing 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 communications network.
[0101] The processes and logic flows described in this disclosure may be performed by one or more programmable processors executing one or more computer programs to perform actions by manipulating input data and generating output. The processes and logic flows may also be performed by, and an apparatus may also be implemented as, special purpose logic circuitry, such as, for example, an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit).
[0102] Processors suitable for executing a computer program include, by way of example, both general-purpose and special-purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor receives 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 in accordance with the instructions and one or more memory devices for storing instructions and data. Generally, a computer also includes one or more mass storage devices for storing data, such as magnetic disks, magneto-optical disks, optical disks, solid-state drives, etc., or is operatively coupled to receive data from or transfer data to them, or both. However, a computer need not have such devices. Furthermore, a computer may be incorporated into 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, by way of example, all forms of non-volatile memory, media, and memory devices, including 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 the memory can be supplemented by, or incorporated in, special purpose logic circuitry.
[0103] To provide for interaction with a user, embodiments of the subject matter described herein may be implemented on a computer having a display device, such as a CRT (cathode ray tube), LCD (liquid crystal display) monitor, light-emitting diode (LED) monitor, etc., for displaying information to the user, and a keyboard and pointing device, such as a mouse, trackball, touchpad, stylus, etc., by which the user can provide input to the computer. Other types of devices may also be used to provide interaction with the user; for example, feedback provided to the user may be any form of sensory feedback, such as visual feedback, auditory feedback, or haptic feedback, and input from the user may be received in any form, including acoustic, speech, or tactile input. Other possible input devices include touchscreens or other touch-sensitive devices, such as single-point or multi-point resistive or capacitive trackpads, voice recognition hardware and software, optical scanners, optical pointers, digital image capture devices and associated interpretation software. Additionally, the computer can interact with the 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.
[0104] Embodiments of the subject matter described in this disclosure may be implemented in a computing system that includes back-end components, e.g., as a data server, or includes middleware components, e.g., an application server, or includes front-end components, e.g., a client computer having a graphical user interface or web browser through which a user can interact with embodiments 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 may 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), etc.
[0105] 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 the respective computers and having a client-server relationship to each other. In some embodiments, a server transmits data (e.g., HTML pages) to the client devices (e.g., for the purpose of displaying the data to and receiving user input from users interacting with the client devices). Data generated at the client devices (e.g., results of user interactions) can be received from the client devices by the server.
[0106] One or more computer systems may be configured to perform particular operations or actions by installing software, firmware, hardware, or a combination thereof on the system that causes the system to perform the actions during operation. One or more computer programs may be configured to perform particular operations or actions by including instructions that, when executed by a data processing device, cause the device to perform the actions.
[0107] References throughout this disclosure to "one embodiment" or "an embodiment" mean a particular feature, structure, or characteristic described in connection with an embodiment that is included in at least one embodiment. Thus, the appearances of the phrase "in one embodiment" or "in an embodiment" in various places throughout this disclosure are not necessarily all referring to the same embodiment. Additionally, the term "or" is intended to mean an inclusive "or" rather than an exclusive "or."
[0108] While the present disclosure contains many specific implementation details, these should not be construed as limitations on the scope of any invention or what may be claimed, but rather as descriptions of features specific to particular embodiments of a particular invention. Certain features described in this 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. Furthermore, while features may be described above as acting in particular combinations and initially claimed as such, one or more features from a claimed combination may, in some cases, be omitted from the combination, and the claimed combination may be directed to a subcombination or a variation of the subcombination.
[0109] 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 any sequential order, or that all of the operations shown be performed, to achieve desirable results. In certain situations, multitasking and parallel processing may be advantageous. Furthermore, the separation of various system components in the above embodiments should not be understood as requiring such separation in all embodiments, and it should be understood that the described program components and systems may generally be integrated together in a single software product or packaged in multiple software products.
[0110] Accordingly, 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 certain implementations, multitasking and parallel processing may be advantageous.
[0111] The terms "example" or "exemplary" are used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as "example" or "exemplary" should not necessarily be construed as preferred or advantageous over other aspects or designs. Rather, use of the terms "example" or "exemplary" is intended to concretely present the concept. As used in this application, 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, "X includes A or B" is satisfied if X includes A, if X includes B, or if X includes both A and B. Additionally, the articles "a" and "an," as used in this application and the appended claims, should be construed generally to mean "one or more" unless otherwise specified or clear from the context that the singular form is intended. Furthermore, the use of the terms "one embodiment" or "one embodiment" or "one implementation" or "one embodiment" throughout is not intended to refer to the same embodiment or implementation unless so stated. Furthermore, the terms "first," "second," "third," "fourth," etc., as used herein, are intended as labels to distinguish different elements and do not necessarily imply an order according to their numerical designations.
[0112] In the above description and in the claims, phrases such as "at least one of" or "one or more of" may appear followed by a list of conjunctive elements or features. The term "and / or" may also appear with a list of two or more elements or features. Such phrases are intended to mean any of the listed elements or features individually, or any of the listed elements or features in combination with any of the other listed elements or features, unless otherwise implicitly or explicitly contradicted by the context in which they are used. 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 alone, B alone, or A and B together," respectively. A similar interpretation is intended for lists containing more than two 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 alone, B alone, C alone, A and B, A and C, B and C, or A, B, and C," respectively. Furthermore, use of the term "based on" above and in the claims is intended to mean "based at least in part on," allowing for unrecited features or elements.
[0113] The above description of illustrated embodiments of the present invention is not intended to be exhaustive or to limit the invention to the precise form disclosed. While specific embodiments and examples of the present invention have been described herein for illustrative purposes, those skilled in the art will recognize that various equivalent modifications are possible within the scope of the present invention. The subject matter described herein can be implemented in systems, devices, methods, and / or articles, depending on the desired configuration. The embodiments set forth in the foregoing description do not represent all embodiments consistent with the subject matter described herein. Instead, they are merely some examples consistent with aspects related to the described subject matter. While several variations have been described in detail above, other modifications or additions are possible. In particular, additional features and / or variations may be provided in addition to those described herein. For example, the embodiments described above may be directed to various combinations and subcombinations of the disclosed features and / or combinations and subcombinations of several additional features described above. Other embodiments may 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 client device of a first user to initiate an interactive session with a cloud-based client application and a second request from a cloud-connected client application controller of the first user to connect to the interactive session, the cloud-based client application configured to execute on a computing platform different from the client device and the cloud-connected application controller, the cloud-connected application controller being separate from and in communication with the client device; reserving, by the at least one data processor, in response to the first request, an application engine from a pre-instantiated application engine pool of a plurality of pre-instantiated application engine pools, within which the cloud-based client application executes remotely from the client device and the cloud-connected application controller; connecting, by the at least one data processor, to the cloud-connected client application controller separately from the client device in response to the second request; receiving, by the at least one data processor, interaction data when the first user engages with first media data associated with the cloud-based client application via the cloud-connected client application controller, as the first media data is displayed to the first user via a display application executing on the client device; modifying, by the at least one data processor, the cloud-based client application executing within the application engine based on the received interaction data; providing, by the at least one data processor, second media data associated with the modified cloud-based client application to the first user via the display application executing on the client device for interaction via the cloud-connected application controller; and A method comprising:
2. The method of claim 1 , further comprising maintaining the application engine in a standby or sleep mode before receiving the first request.
3. The method of claim 1 , further comprising: after reserving the application engine from the pre-instantiated application engine pool, replacing the application engine with a second application engine.
4. The method of claim 1 , wherein the pre-instantiated application engine pool has a fixed size.
5. The method of claim 1 , wherein the pre-instantiated application engine pool has a dynamically changing size.
6. The method of claim 5 , wherein the size varies based at least in part on usage trends or historical usage information.
7. 7. The method of claim 6, wherein the size increases as usage trends increase for application engine modules of the pre-instantiated application engine pool, and the size decreases as usage trends decrease for the application engine modules.
8. 7. The method of claim 6, wherein varying the size of the pre-instantiated application engine pool includes training a machine learning model based on usage trend data for application engine modules, the machine learning model to modify the size of the pre-instantiated application engine pool to minimize an amount of time to allocate application modules and maintain a reduced allocation time for allocation of application modules; and modifying the size of the pre-instantiated application engine pool using the trained machine learning model.
9. 2. The method of claim 1 , wherein at least a first subset of pre-instantiated application engine pools of the plurality of pre-instantiated application engine pools comprises fixed-size pre-instantiated application engine pools, and at least a second subset of pre-instantiated application engine pools of the plurality of pre-instantiated application engine pools comprises dynamic-size pre-instantiated application engine pools.
10. 10. The method of claim 9, wherein the first subset includes pre-instantiated application engine pools that have lower usage than the pre-instantiated application engine pools of the second subset.
11. 1. A system comprising: at least one data processor; a memory storing instructions that, when executed by the at least one data processor, cause the at least one data processor to: receiving a first request from a client device of a first user to initiate an interactive session with a cloud-based client application and a second request from a cloud-connected client application controller of the first user to connect to the interactive session, the cloud-based client application configured to run on a computing platform different from the client device and the cloud-connected application controller, the cloud-connected application controller being separate from and in communication with the 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 in which the cloud-based client application executes remotely from the client device and the cloud-connected application controller; connecting to the cloud-connected client application controller separately from the client device in response to the second request; receiving interaction data when the first user engages with first media data associated with the cloud-based client application via the cloud-connected client application controller and the first media data is displayed to the first user via a display application executing on the client device; modifying the cloud-based client application executing within the application engine based on the received interaction data; providing second media data associated with the modified cloud-based client application to the first user via the display application executing on the client device for interaction via the cloud-connected application controller; and The memory and A system comprising:
12. The system of claim 11 , further comprising maintaining the application engine in a standby or sleep mode before receiving the first request.
13. The system of claim 11 , further comprising: after reserving the application engine from the pre-instantiated application engine pool, replacing the application engine with a second application engine.
14. The system of claim 11 , wherein the pre-instantiated application engine pool has a fixed size.
15. The system of claim 11 , wherein the pre-instantiated application engine pool has a dynamically changing size.
16. The system of claim 15 , wherein the size varies based at least in part on usage trends or historical usage information.
17. 17. The system of claim 16, wherein the size increases as usage trends increase for application engine modules of the pre-instantiated application engine pool, and the size decreases as usage trends decrease for the application engine modules.
18. 17. The system of claim 16, wherein varying the size of the pre-instantiated application engine pool includes training a machine learning model based on usage trend data for application engine modules, the machine learning model to modify the size of the pre-instantiated application engine pool to minimize an amount of time to allocate application modules and maintain a reduced allocation time for allocation of application modules; and modifying the size of the pre-instantiated application engine pool using the trained machine learning model.
19. 12. The system of claim 11, wherein at least a first subset of pre-instantiated application engine pools of the plurality of pre-instantiated application engine pools comprises fixed-size pre-instantiated application engine pools, and at least a second subset of pre-instantiated application engine pools of the plurality of pre-instantiated application engine pools comprises dynamic-size pre-instantiated application engine pools.
20. 20. The system of claim 19, wherein the first subset includes pre-instantiated application engine pools having lower usage than the pre-instantiated application engine pools of the second subset.
21. 1. A computer program product comprising a non-transitory machine-readable medium storing instructions that, when executed by at least one programmable processor forming part of at least one computing system, cause the at least one programmable processor to: receiving a first request from a client device of a first user to initiate an interactive session with a cloud-based client application and a second request from a cloud-connected client application controller of the first user to connect to the interactive session, the cloud-based client application configured to run on a computing platform different from the client device and the cloud-connected application controller, the cloud-connected application controller being separate from and in communication with the 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 in which the cloud-based client application executes remotely from the client device and the cloud-connected application controller; connecting to the cloud-connected client application controller separately from the client device in response to the second request; receiving interaction data when the first user engages with first media data associated with the cloud-based client application via the cloud-connected client application controller and the first media data is displayed to the first user via a display application executing on the client device; modifying the cloud-based client application executing within the application engine based on the received interaction data; providing second media data associated with the modified cloud-based client application to the first user via the display application executing on the client device for interaction via the cloud-connected application controller; and A computer program product that causes a computer to perform operations including: