IP Library Granted Patent US 8,954,595
Granted Patent B2
US 8,954,595 · App. 11/324,140 · Granted Feb 10, 2015

Systems and methods for providing client-side accelerated access to remote applications via TCP buffering

Inventors: Prabakar Sundarrajan (Saratoga, CA); Junxiao He (Saratoga, CA); Sergey Verzunov (Moscow, RU); Charu Venkatraman (Bangalore, IN); Anil Shetty (Union City, CA)
Assignee: Citrix Systems, Inc.
H04L47/10H04L47/19H04L47/263H04L63/0272H04L63/0428
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,954,595
App. No.
11/324,140
Granted
Feb 10, 2015
Kind
B2
Abstract

The present invention is directed towards systems and methods for dynamically deploying and executing acceleration functionality on a client to improve the performance and delivery of remotely accessed applications. In one embodiment, the client-side acceleration functionality is provided by an acceleration program that performs a transport layer connection buffering technique for improving performance of communications and delivery of a remotely-accessed application. The acceleration program establishes a transport layer connection from the client to the server and buffers requests of the client based on determining a difference between a rate of consumption of responses received by the client from a server and a rate of production of requests transmitted by the client to the server. As such, the acceleration program can throttle transmissions of the client if the client's rate of consumption falls behind the rate of submission of requests.

Claims (51)

1. A method for managing on a client a difference between a rate of consumption of responses received from a server and a rate of production of requests transmitted to the server, the method comprising:

intercepting, by an acceleration program on the client, a request by an application to access a server, the acceleration program communicating with the server on behalf of the application via a transport layer connection;

receiving, by the acceleration program via the transport layer connection, a plurality of responses from the server;

storing, by the acceleration program, the plurality of received responses from the server in a buffer of the client;

consuming, by the client from the buffer, the plurality of stored received responses at a protocol layer above a transport layer of the transport layer connection;

determining, by the acceleration program, a difference between a rate of consumption of stored received responses from the buffer at the protocol layer and a rate of production of requests transmitted by the client falls below a predetermined threshold;

storing, by the acceleration program, and responsive to the determination, the request in a memory element of the client; and

determining, by the acceleration program, to transmit the stored request based on a change in one of the rate of consumption or the rate of production by the client.

2. The method of claim 1 , wherein the rate of consumption is less than the rate of production.

3. The method of claim 1 , comprising transmitting, by an appliance, the acceleration program to the client upon a request from the client to establish a connection to the server.

4. The method of claim 3 , comprising upon receipt of the acceleration program, automatically installing and executing, by the client, the acceleration program.

5. The method of claim 1 , wherein the acceleration program comprises a filter device driver interfaced to a transport layer of a network stack of the client.

6. The method of claim 1 , comprising compressing, by the acceleration program, the request stored in the memory element.

7. The method of claim 1 , comprising providing, by the acceleration program, a pool of one or more transport layer connections for accessing the server by the application on the client.

8. The method of claim 1 , comprising multiplexing, by the acceleration program, requests from a plurality of applications on the client via the transport layer connection.

9. The method of claim 1 , comprising executing, by the client, the acceleration program, transparently to one of a network layer, a session layer, or the application layer of a network stack of the client.

10. The method of claim 1 , comprising executing, by the client, the acceleration program, transparently to one of the application or the server.

11. A system for managing on a client a difference between a rate of consumption of responses received from a server and a rate of production of requests transmitted to the server, the system comprising:

means for intercepting, by an acceleration program on the client, a request by an application to access a server, the acceleration program communicating with the server on behalf of the application via a transport layer connection;

means for receiving, by the acceleration program via the transport layer connection, a plurality of responses from the server;

a buffer for storing, by the acceleration program, the plurality of received responses from the server;

means for consuming, by the client from the buffer, the plurality of stored received responses at a protocol layer above a transport layer of the transport layer connection;

means for determining, by the acceleration program, a difference between a rate of consumption of stored received responses from the buffer at the protocol layer and a rate of production of requests transmitted by the client falls below a predetermined threshold;

means for storing, by the acceleration program, and responsive to the determination, the request in a memory element of the client; and

means for determining, by the acceleration program, to transmit the stored request based on a change in one of the rate of consumption or the rate of production by the client.

12. The system of claim 11 , wherein the rate of consumption is less than the rate of production.

13. The system of claim 11 , comprising means for transmitting, by an appliance, the acceleration program to the client upon a request from the client to establish a connection to the server.

14. The system of claim 13 , comprising the client automatically installing and executing the acceleration program upon receipt.

15. The system of claim 11 , wherein the acceleration program comprises a filter device driver interfaced to a transport layer of a network stack of the client.

16. The system of claim 11 , comprising means for compressing, by the acceleration program, the request stored in the memory element.

17. The system of claim 11 , comprising means for providing, by the acceleration program, a pool of one or more transport layer connections for accessing the server by the application on the client.

18. The system of claim 11 , comprising means for multiplexing, by the acceleration program, requests from a plurality of applications on the client via the transport layer connection.

19. The system of claim 11 , wherein the client executes the acceleration program transparently to one of a network layer, a session layer, or the application layer of a network stack of the client.

20. The system of claim 11 , wherein the client executes the acceleration program transparently to one of the application or the server.

21. A method for managing on a client a difference between a rate of processing responses received from a server and a rate of production of requests transmitted to the server, the method comprising:

intercepting, by an acceleration program on the client, a request by an application to access a server, the acceleration program communicating with the server on behalf of the application via a transport layer connection;

receiving, by the acceleration program via the transport layer connection, a plurality of responses from the server;

providing, by the acceleration program, the plurality of responses to an application via an application layer protocol;

consuming, by the application, the plurality of responses;

determining, by the acceleration program, a difference between a rate of consumption of responses by the application via the application layer protocol and a rate of production of requests transmitted by the client falls below a predetermined threshold; and

buffering, by the acceleration program, and responsive to the determination, the request;

determining, by the acceleration program, the difference between the rate of consumption of responses and the rate of production of requests transmitted by the client has risen above a predetermined threshold; and

transmitting, by the acceleration program, the buffered request.

22. A method for managing on a client a difference between a rate of consumption of responses received from a server and a rate of production of requests transmitted to the server, the method comprising:

intercepting, by an acceleration program on the client, a request by an application to access a server, the acceleration program communicating with the server on behalf of the application via a transport layer connection;

receiving, by the acceleration program via the transport layer connection, a plurality of responses from the server;

processing, by the client, the plurality of responses at a protocol layer above a transport layer of the transport layer connection;

determining, by the acceleration program, a difference between a rate of processing of responses at the protocol layer and a rate of production of requests transmitted by the client falls below a predetermined threshold;

storing, by the acceleration program, and responsive to the determination, the request in a memory element of the client; and

determining, by the acceleration program, the difference between the rate of processing of responses and the rate of production of requests transmitted by the client has risen above the predetermined threshold; and

transmitting, by the acceleration program, the stored request.

Assignments (9)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
SECURITY INTEREST Recorded Sep 30, 2022
From: CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 062079/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 19, 2006
From: SUNDARRAJAN, PRABAKAR; HE, JUNXIAO; VERZUNOV, SERGEY; VENKATRAMAN, CHARU; SHETTY, ANIL
To: CITRIX SYSTEMS, INC.
Reel/Frame 017642/0602 →
Continuity (3)
Continuation In Part 11039946 · Jan 24, 2005
Provisional Application 60640464 · Dec 30, 2004
Related Publication 20060195605A1 · Aug 31, 2006