In a remote presentation session, a client computer and a server computer communicate across a communications network. The client sends the server locally-received input, such as mouse cursor movements and keyboard presses. In turn, the server receives this input and performs processing associated with it, such as executing an application in a user session. When the server performs processing that results in output, such as graphical output or sound, the server sends this output to the client for presentation. In this manner, applications appear to a user of the client to execute locally on the client when they, in fact, execute on the server.
A problem with conventional remote presentation sessions is that the client participating in the remote presentation session needs to have installed upon it a remote presentation session application—an application that is configured to communicate with the server in accordance with the remote presentation session protocol. This requirement means that there may be many computers accessible to a user that have a network connection that may communicate with the remote presentation session server, but lack the remote presentation session application with which to conduct a remote presentation session.
There are also techniques for a client to conduct a remote presentation session with a web browser, rather than a remote-presentation-session-specific application. In these techniques, commonly the remoted desktop image is subdivided into a plurality of tiles, and each of these image tiles are sent to the client (or an indication of the tile, where the client has cached the tile), and displayed in the client's web browser. When the remoted desktop image changes, the “dirty” tiles are determined—those tiles where the image has changed—and those dirty tiles are sent to the client for display via the web browser.
There are many problems with these techniques for a client conducting a remote presentation session using a web browser, some of which are well known.
One problem with a client conducting a remote presentation session using a web browser where the client displays image tiles is a problem of performance. Compared to a remote presentation session using a specific remote presentation session application, the web browser-and-image-tiles techniques offer a much lower frame rate. Not only is the frame rate much lower, but frequently the frame rate is so low that it negatively impacts user experience. That is, the frame rate is often so low that motions displayed in the remote presentation session are jerky, and there is a disconnect between the input the user provides and when the user sees the graphical result of processing that input.
It would therefore be an improvement to provide an invention for a client lacking a remote presentation session application to conduct a remote presentation session with a server using video rather than image tiles. In embodiments of the invention, a client has a web browser application that is configured to both display video and receive user input that is directed to the web browser application. The client may use the web browser to establish an AJAX (Asynchronous JavaScript and XML—Extensible Markup Language) connection with the server to open a connection. The client and server then exchange information to authenticate the client to the server.
The client then captures user input (e.g. mouse, keyboard, or touch) directed to the web browser window and asynchronously sends it to the server. The server receives this input and injects it into the appropriate application or user session. As an application or user session generates graphical output, the server captures this graphical output, encodes it to video, and sends it to the client for display via the web browser.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
Embodiments of the invention may execute on one or more computer systems.
The term circuitry used throughout can include hardware components such as hardware interrupt controllers, hard drives, network adaptors, graphics processors, hardware based video/audio codecs, and the firmware used to operate such hardware. The term circuitry can also include microprocessors, application specific integrated circuits, and processors, e.g., cores of a multi-core general processing unit that perform the reading and executing of instructions, configured by firmware and/or software. Processor(s) can be configured by instructions loaded from memory, e.g., RAM, ROM, firmware, and/or mass storage, embodying logic operable to configure the processor to perform a function(s).
In an example embodiment, where circuitry includes a combination of hardware and software, an implementer may write source code embodying logic that is subsequently compiled into machine readable code that can be executed by hardware. Since one skilled in the art can appreciate that the state of the art has evolved to a point where there is little difference between hardware implemented functions or software implemented functions, the selection of hardware versus software to effectuate herein described functions is merely a design choice. Put another way, since one of skill in the art can appreciate that a software process can be transformed into an equivalent hardware structure, and a hardware structure can itself be transformed into an equivalent software process, the selection of a hardware implementation versus a software implementation is left to an implementer.
Referring now to
Computer-readable storage media can provide non volatile and volatile storage of processor executable instructions, data structures, program modules and other data for the computer system 20 such as executable instructions. A basic input/output system (BIOS) 26, containing the basic routines that help to transfer information between elements within the computer system 20, such as during start up, can be stored in system memory 22. A number of programs may be stored on firmware, storage device 27, RAM 25, and/or removable storage devices 29, and executed by processor 21 including an operating system and/or application programs. Generally, such computer-readable storage media can be used in some embodiments to store processor executable instructions tangibly embodying aspects of the present disclosure.
Commands and information may be received by computer system 20 through input devices which can include, but are not limited to, a keyboard 40 and pointing device 42. Other input devices may include a microphone, joystick, game pad, scanner or the like. These and other input devices are often connected to processor 21 through a serial port interface that is coupled to the system bus, but may be connected by other interfaces, such as a parallel port, game port, or universal serial bus (USB). A display or other type of display device can also be connected to the system bus via an interface, such as a video adapter which can be part of, or connected to, a graphics processor unit 90. In addition to the display, computers typically include other peripheral output devices, such as speakers and printers (not shown). The exemplary system of
Computer system 20 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer. The remote computer may be another computer, a server, a router, a network PC, a peer device or other common network node, and typically can include many or all of the elements described above relative to computer system 20. When used in a LAN or WAN networking environment, computer system 20 can be connected to the LAN or WAN through network interface card (NIC) 53. NIC 53, which may be internal or external, can be connected to the system bus. In a networked environment, program modules depicted relative to the computer system 100, or portions thereof, may be stored in the remote memory storage device. It will be appreciated that the network connections described here are exemplary and other means of establishing a communications link between the computers may be used. Moreover, while it is envisioned that numerous embodiments of the present disclosure are particularly well-suited for computerized systems, nothing in this document is intended to limit the disclosure to such embodiments.
In a networked environment, program modules depicted relative to computer system 100, or portions thereof, may be stored in a remote memory storage device accessible via NIC 53. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers may be used. In an embodiment where computer system 20 is configured to operate in a networked environment, the operating system is stored remotely on a network, and computer system 20 may netboot this remotely-stored operating system rather than booting from a locally-stored operating system. In an embodiment, computer system 100 comprises a thin client having an operating system that is less than a full operating system, but rather a kernel that is configured to handle networking and display output.
Operational environment 200 includes client 220 that is comprised of circuitry configured to effectuate REMOTE DESKTOP PROTOCOL (RDP) client 223 executing within a runtime environment of a web browser or other web based interface (browser 222). In an embodiment, client 220 may be implemented in computing device 20 of
In an embodiment, client 220 may connect to remote sessions hosted on server 230 via remote access server 260 by exchanging remote session data encoded according to an RDP protocol (RDP-encoded data). For example, client 220 may establish a hypertext transport protocol (HTTP) connection with remote access server 260 using browser 222. Through the HTTP connection, remote access server 260 provides client 220 with browser-native program code (e.g. Javascript) that browser 222 executes to instantiate RDP client 223, in this example. In an embodiment, RDP client 223 is a native RDP client executing within browser 222. RDP client 223 includes socket client 224 that establishes a socket connection with a socket host. In an embodiment, the socket host is implemented as a network relay (e.g. WebSocket relay 215). In an embodiment, the socket host is implemented as a socket listener in transport logic 241, such as WebSocket listener 745. While the remote session data exchanged between server 230 and client 220 is described herein as being encoded according to an RDP protocol, those skilled in the art will recognize that the remote session data (e.g. a rendered display output from an operating system running on server 230) may be encoded according to any known remote presentation session protocol without departing from the spirit of the present invention.
Once connected to the session, the user may interact with the remote session by providing commands and other information (user input) to client 220 through input devices similar to input devices 116 of
As appreciated by one skilled in the art, because RDP client 223 is executed within the application framework of web browser 222, RDP client 223 is allowed access to only those system resources (e.g., CPU time, memory, etc.) that are accessible to web browser 222. web page when download and loaded/displayed in a browser (causing execution of the modules) provides several features of the invention described below. In addition, RDP client 223 is instantiated in web browser through browser-native program code (e.g. Javascript) comprising an HTML file. Accordingly, aspects of the present invention may be implemented without installing a plug-ins to web browser 222 or an RDP-specific application to client 220.
Operational environment 200 also includes server 230, which is comprised of circuitry configured to effectuate a remote presentation session server. In an embodiment, server 230 can further include circuitry configured to support remote desktop connections. In the example depicted by
Continuing with the general description of
In some instances, engine 242 can receive remote presentation session connection requests and determine that, for example, a license is available and a session can be generated for the request. In the situation where server 230 is a remote computer that includes remote desktop capabilities, engine 242 can be configured to generate a session in response to a remote presentation session connection request without checking for a license. As illustrated by
As illustrated by
In addition to receiving input from a client 220, draw commands can be received from applications and/or a desktop and be processed by the GDI 254. The GDI 254 in general can include a process that can generate graphical object draw commands. The GDI 254 in this example embodiment can be configured to pass its output to the remote display subsystem 255 where the commands are formatted for the display driver that is attached to the session. In certain example embodiments one or more physical displays can be attached to the server 230, e.g., in a remote desktop situation. In these example embodiments the remote display subsystem 255 can be configured to mirror the draw commands that are rendered by the display driver(s) of the remote computer system and transmit the mirrored information to the client 220 via a stack instance associated with the session.
In another example embodiment, where the server 230 is a remote presentation session server, the remote display subsystem 255 can be configured to include virtual display driver(s) that may not be associated with displays physically attacked to server 230, e.g., server 230 could be running headless. The remote display subsystem 255 in this embodiment can be configured to receive draw commands for one or more virtual displays and transmit them to client 220 via a stack instance associated with the session. In an embodiment of the present invention, the remote display subsystem 255 can be configured to determine the display resolution for each display driver, e.g., determine the display resolution of the virtual display driver(s) associated with virtual displays or the display resolution of the display drivers associated with physical displays; and route the packets to client 220 via the associated protocol stack instance.
In some example embodiments the session manager 244 can additionally instantiate an instance of a logon process associated with the session identifier of the session that can be configured to handle logon and logoff for the session. In these example embodiments drawing commands indicative of the graphical user interface associated with the logon process can be transmitted to the client 220 where a user of the client 220 can input an account identifier, e.g., a username/password combination, a smart card identifier, and/or biometric information into a logon screen. The information can be transmitted to server 230 and routed to engine 242 and the security subsystem 253 of the session core 251. For example, in certain example embodiment, engine 242 can be configured to determine whether the user account is associated with a license; and the security subsystem 253 can be configured to generate a security token for the session.
Client 320 may initiate a remote presentation session by submitting a connection request to establish the remote session over an HTTP connection with a remote access server 360 providing access to server 330 via network 310. One skilled in the art will recognize that remote access server 360 and server 330 may be operating on the same physical hardware. The HTTP connection may be a variation of HTTP, such as a HTTPS (HTTP Secure) connection. In an embodiment, establishing an HTTP connection is effectuated by a user of client 320 providing user input for a web browser of client 320 to open a web page associated with remote access server 360. For example, the user may enter a uniform resource locator (URL) into an address field of web browser that directs the web browser to a web page usable by the user to access the remote presentation session. In an embodiment, the URL is a network address associated with a login web page. The HTTP connection may be an AJAX connection between client 320 and remote access server 360.
In response to the connection request, remote access server 360 may send a connection response to client 320 comprising an HTML file for the web page associated with remote access server 360. In an embodiment, client 320 may tangibly store the connection response in a computer-readable storage device accessible by the web browser. In an embodiment, remote access server 360 provides client 320 with browser-native program code by embedding the browser-native program code within the HTML file. Alternatively, remote access server 360 provides client 320 with browser-native program code by including instructions (e.g. embedded links) in the HTML file that directs the browser of client 320 to a network storage location (not shown) where the browser-native program code may be downloaded.
When executed within a runtime environment of client 320's browser, the browser-native program code may implement an RDP client 325 executing within application framework associated with the browser. Once implemented, RDP client 325 may establish a first socket connection between RDP client 325 and socket host 340 using a native socket API of the browser of client 320. In an embodiment, to establish a first socket connection, RDP client 325 may send a socket handshake request via a native socket API of client 320's browser to the socket host 340. Upon receiving the socket handshake request, socket host 340 may send a socket handshake response to RDP client 325 via a native socket API of client 320's browser.
Similarly, socket host 340 establishes a second socket connection with server 330 upon establishing the first socket channel. The first and second socket channels, collectively, establish a socket transport channel between RDP client 325 and server 330 using the HTTP connection as a conduit. In an embodiment, socket host 340 is implemented within a network relay intervening between client 320 and server 330 within network 310 (e.g. network relay 215 of
Client 320 may establish a remote presentation session with server 330, using RDP client 325, via the socket transport channel. In this remote presentation session, client 320 serves as the remote session client (such as client 220 of
In an embodiment, this login may comprise client 320 authenticating itself to remote access server 360 (which, in turn, may use a credential associated with the authentication to authenticate to server 330). This authentication may, for instance, comprise client 320 sending a user identification and password to remote access server 360, which remote access server 360 may authenticate against a database of user-password pairs. In an embodiment, remote access server 360 does not authenticate client 320 itself, but, rather, forwards a credential from client 320 to server 330.
Server 330 may then transmit the graphical output of what is being remoted (e.g. GUI data) to client 320 via the remote presentation session as RDP-encoded GUI data. This may be performed in a manner similar to how server 230 of
RDP client 325 receives the encapsulated RDP-encoded GUI data and de-encapsulates the otherwise unaltered RDP-encoded GUI data using the browser-native program code that executes within the browser's native runtime environment). RDP client 325 decodes the RDP-encoded GUI data and forwards the decoded RDP-encoded data to the browser of client 320, as discussed above with respect to RDP client 223 of
Client 320 may issue commands that affect what server 330 processes. A user of client 320 may provide input directed to the browser of client 320. This input may comprise input such as mouse, keyboard, and touch input, along with an indication of where the input was made relative to the video (e.g. 50 pixels to the right and 50 pixels below the upper left corner of the displayed video). Client 320 may capture this input at the browser using JavaScript techniques for detecting input. Client 320 may then send the input to RDP client 325.
RDP client 325 receives the input from client 320 and encodes the input as RDP-encoded input data. RDP client 325 may then send this RDP-encoded input data to server 330, via socket host 340, where server 330 injects the input into the appropriate application or user session for the remote presentation session, and performs processing associated with input being provided to that application or user session. When that processing results in the generation of additional GUI data, server 330 may encode this additional GUI data and send it to RDP client 325 executing within the browser of client 320, which converts it to video for client 320 to display.
In embodiments, server 330 and remote access server 360 may be executed on virtual machines (VMs), both virtual machines executing on the same physical host computer. In such a scenario, server 330 and remote access server 360 may communicate via a loopback connection (one that uses an IP address that refers to the network interface that it uses itself—such as 127.0.0.1). Server 330 may listen on port 3389 and remote access server 360 may listen on port 3390, for example. Then, server 330 may communicate with remote access server 360 by transmitting data to 127.0.0.1:3390, and remote access server 360 may communicate with server 330 by transmitting data to 127.0.0.1:3389.
Using a loopback connection between the server 330 and remote access server 360 executing on the same physical machine allows a legacy remote presentation server to operate without modification. This is similar to how using remote access server 360 as an intermediary between server 330 and a client that uses a web browser to conduct a remote presentation session allows a legacy server to operate without modification. With regard to the loopback connection, a legacy remote presentation server that is configured only to transmit data to a client across a communications network interface may be used to effectuate embodiments of the invention, because the server will still communicate with a client (or the proxy) across a network communications interface.
In step 604, the server establishes the remote presentation session between the client and the remote session (or operating system running on the server). In an embodiment, the server may authenticate a credential received from the client prior to establishing the remote presentation session with the RDP client. For example, the server may determine a HTTP session token that uniquely identifies the HTTP session and send it to the client. The client may store this token (such as in the form of an HTTP cookie) and then transmit it to the server in future communications to identify the HTTP session. In an embodiment, the credential is associated with a user authorized to conduct the remote presentation session with the remote presentation session process. In an embodiment, the server identifies the remote presentation session process based, in part, on the credential. In step 606, the server encodes the GUI data generated by the remote presentation session process into a plurality of packets according to a remote presentation protocol. In step 608, the server sends the plurality of packets to the client for decoding by the web browser using the browser-native program code to display the GUI data. In an embodiment, the plurality of packets encoded according to the remote presentation protocol is natively decoded and displayed within the web browser. In an embodiment, the client displays the GUI data as a video element embedded in a web page.
In embodiments, one or more steps of method 600 include encoding the graphical data as video based on having previously encoded a second graphical data as second video. That is, the current video being encoded may have commonalities with previously encoded video, and the server may exploit these commonalities to reduce the processing resources used to encode the GUI data as video. For instance, this may comprise encoding the GUI data based on a dirty region of the graphical data relative to the second graphical data, and using at least part of the second video to encode the graphical data. This may occur, for instance, as depicted with respect to frame 500 of
Embodiments of encoding the GUI data as video based on having previously encoded a second GUI data as second video also include encoding the GUI data based on an element depicted in the GUI data also being depicted in the second GUI data, the element being depicted in a different location in the GUI data than in the second GUI data, and using at least part of the second video to encode the GUI data. That is, an application window (or the like) may have been moved between the GUI data and the second GUI data. This may occur, for instance, as depicted with respect to frames 500 and 550 of
In embodiments, one or more steps of method 600 include receiving an indication that a first part of the GUI data comprises text and a second part of the GUI data comprises an image or video; and encoding the GUI data as video based on the indication that the first part of the GUI data comprises text and the second part of the graphical data comprises the image or video. Some remote presentation servers are configured to receive “hints” from the applications whose graphical output they are remoting, where these hints indicate what the graphical output is—e.g. text, solid fills, images, or videos. Some remote presentation servers are configured to analyze graphical data to determine this information. In such embodiments, the video may be encoded based on this information. For example, users may be more sensitive to seeing compression artifacts in text than in images. The server may variably encode the graphical output to video, such that it uses a more lossy compression on the portions of the graphical output that are images than on the portions of the graphical output that are text.
In step 708, the server injects the user input into the remote presentation session process. In step 710, the server sends a second GUI data encoded with the remote presentation protocol to the RDP client, the second graphical data corresponding to a graphical result of executing an operation associated with the user input on the server. For example, the server may have received the user input, performed processing associated with the user input, and generated more remote presentation session graphical data associated with a graphical result (as well as possibly an audio result, or perhaps only an audio result) from performing processing associated with the user input.
In an embodiment, the client in one or more of methods 600 and 700 may receive RDP-encoded GUI data in a format that is natively supported by the client's browser. In an embodiment, the RDP-encoded GUI data may include video data that may be displayed within a web page by the browser, such as by using the HTML5 <video> tag. In an embodiment, the client in one or more of methods 600 and 700 may extract video data from the RDP-encoded GUI data and provide it to an HTML5 <video> object using a scriptable interface (e.g. W3C Media Source Extensions). In an embodiment, the RDP-encoded GUI data may include video data that the browser may decode using the native capabilities of the browser rather than the browser-native program code downloaded by the client.
Parent partition 804 in this operational environment can be configured to provide resources to guest operating systems executing in the child partitions 1-N by using virtualization service providers 828 (VSPs) that are typically referred to as back-end drivers in the open source community. Broadly, VSPs 828 can be used to multiplex the interfaces to the hardware resources by way of virtualization service clients (VSCs) (typically referred to as front-end drivers in the open source community) and communicate with the virtualization service clients via communication protocols. As shown by the figures, virtualization service clients can execute within the context of guest operating systems. These drivers are different than the rest of the drivers in the guest in that they may be supplied with a hypervisor, not with a guest.
Microkernel 802 can enforce partitioning by restricting a guest operating system's view of system memory. Guest memory is a partition's view of memory that is controlled by a hypervisor. The guest physical address can be backed by system physical address (SPA), i.e., the memory of the physical computer system, managed by hypervisor. As shown by the figure, in an embodiment the GPAs and SPAs can be arranged into memory blocks, i.e., one or more pages of memory. When a guest writes to a block using its page table the data is actually stored in a block with a different system address according to the system wide page table used by hypervisor.
As shown by
Each child partition can include one or more virtual processors (830 and 832) that guest operating systems (820 and 822) can manage and schedule threads to execute thereon. Generally, the virtual processors are executable instructions and associated state information that provide a representation of a physical processor with a specific architecture. For example, one virtual machine may have a virtual processor having characteristics of an INTEL x86 processor, whereas another virtual processor may have the characteristics of a PowerPC processor. The virtual processors in this example can be mapped to logical processors of the computer system such that the instructions that effectuate the virtual processors will be backed by logical processors. Thus, in an embodiment including multiple logical processors, virtual processors can be simultaneously executed by logical processors while, for example, other logical processor execute hypervisor instructions. The combination of virtual processors and memory in a partition can be considered a virtual machine.
Guest operating systems can include any operating system such as, for example, different versions of the MICROSOFT WINDOWS operating system (e.g. WINDOWS XP and WINDOWS 10). The guest operating systems can include user/kernel modes of operation and can have kernels that can include schedulers, memory managers, etc. Generally speaking, kernel mode can include an execution mode in a logical processor that grants access to at least privileged processor instructions. Each guest operating system can have associated file systems that can have applications stored thereon such as terminal servers, e-commerce servers, email servers, etc., and the guest operating systems themselves. The guest operating systems can schedule threads to execute on the virtual processors and instances of such applications can be effectuated.
As depicted, VM 1002a and 1002b are each configured to serve remote presentation sessions with one or more clients that receive video via the remote presentation session, and conduct the remote presentation session via a web browser. For instance, each of VM 1002a and 1002b may be configured to effectuate the functions of server 320 of
The illustrations of the aspects described herein are intended to provide a general understanding of the structure of the various aspects. The illustrations are not intended to serve as a complete description of all of the elements and features of apparatus and systems that utilize the structures or methods described herein. Many other aspects may be apparent to those of skill in the art upon reviewing the disclosure. Other aspects may be utilized and derived from the disclosure, such that structural and logical substitutions and changes may be made without departing from the scope of the disclosure. Accordingly, the disclosure and the figures are to be regarded as illustrative rather than restrictive.
It should be understood that the various techniques described herein may be implemented in connection with hardware or software or, where appropriate, with a combination of both. The subject matter presented herein may be implemented as a computer process, a computer-controlled apparatus or a computing system or an article of manufacture, such as a computer-readable storage medium.
The techniques, or certain aspects or portions thereof, may, for example, take the form of program code (i.e., instructions) embodied in tangible storage media or memory media implemented as storage devices, such as magnetic or optical media, volatile or non-volatile media, such as RAM (e.g., SDRAM, DDR SDRAM, RDRAM, SRAM, etc.), ROM, etc., that may be included in computing devices or accessible by computing devices. When the program code is loaded into and executed by a machine, such as a computer, the machine becomes an apparatus for practicing the disclosure. In the case of program code execution on programmable computers, the computing device generally includes a processor, a storage medium readable by the processor (including volatile and non-volatile memory and/or storage elements), at least one input device, and at least one output device. One or more programs that may implement or utilize the processes described in connection with the disclosure, e.g., through the use of an application programming interface (API), reusable controls, or the like. Such programs are preferably implemented in a high level procedural or object oriented programming language to communicate with a computer system. However, the program(s) can be implemented in assembly or machine language, if desired. In any case, the language may be a compiled or interpreted language, and combined with hardware implementations.
Although the subject matter has been described in language specific to structural features and/or acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as examples of implementing the claims and other equivalent features and acts are intended to be within the scope of the claims.
The previous description of the aspects is provided to enable a person skilled in the art to make or use the aspects. Various modifications to these aspects will be readily apparent to those skilled in the art, and the generic principles defined herein may be applied to other aspects without departing from the scope of the disclosure. Thus, the present disclosure is not intended to be limited to the aspects shown herein but is to be accorded the widest scope possible consistent with the principles and novel features as defined by the following claims.