Patent ID: 7636789

Claim:
A method of sending a variably compressible data stream from a server to a client set over a computer network, the method comprising: preparing at least one routing path set covering the client set, respective routing path sets comprising at least one routing path comprising at least one route between the server and a client through at least zero other clients; and sending the data stream to the client set by: sending portions of the data stream to the clients via the routing path sets; detecting at least one network performance indicator of the performance of the computer network; and adjusting the apportionment of the data stream among the routing path sets according to a utility function involving the at least one network performance indicator and comprising: x . m = k s ( U s ′ ⁡ ( z s ) - 1 n - 1 ⁢ ∑ j ∈ m ⁢ ( b j m ⁢ p j ) ) wherein: m represents the routes comprising the routing path set; {dot over (x)} y represents the change in the sending rate of routing path set y; s represents the server; k x represents an apportionment adjustment scaling factor for the server x; z x represents the total sending rate of server x; U′ x (y) represents the first derivative of a utility function for sending the data stream from server x at rate y; n represents the number of clients among which the data stream is shared; j represents a route; b y x represents the number of instances in which the routing path set x includes route y; and p j represents the routing delay cost of using route j, and is adjusted as: p . j = 1 C j ⁢ ( y j - C j ) p j + wherein: C j represents the capacity of route j, y j represents the total sending rate across route j, and is defined as: y j = ∑ s ∈ S ⁢ ∑ m ∈ s : j ∈ m ⁢ b j m ⁢ x m , ∀ j ∈ J wherein: S represents the set of data stream sources, s represents a source in the data stream source set S, m represents a routing path set utilized by source s, and J represents the set of routes in the network; and wherein (y j −C j ) p j + is defined as y j −C j where p j >0, and as max(0, y j −C j ) where p j ≦0.