weighted round robin

vino via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Oct 10 23:28:10 PDT 2016


On Monday, 10 October 2016 at 09:18:16 UTC, Marc Schütz wrote:
> On Saturday, 8 October 2016 at 22:48:53 UTC, vino wrote:
>> Hi,
>>
>>  Can some one guide me on how to implement the weighted round 
>> robin, below is what i tried or any other better ways to do it
>>
>> Main Requirement : Incoming socket connection has to be sent 
>> to 3 servers in the weighted round robin fashion.
>>
>> Prog:1
>> import std.stdio;
>> import std.range;
>> import std.range.primitives;
>>
>> void main()
>> {
>>     auto a = [1,2,3]; // E.g :Server Array
>>     auto b = [1,2,3,4,5]; // E.g: Socket Array
>>     auto r = roundRobin(a, b);
>>     writeln(r);
>> }
>> OUTPUT : [1, 1, 2, 2, 3, 3, 4, 5]
>> Requirement : [1, 1, 2, 2, 3, 3,1,4,2,5]
>
>     auto r = roundRobin(a.cycle, b.cycle);
>
> Beware though that this yields an infinite range. If you just 
> need one round, you can use:
>
>     import std.algorithm.comparison : max;
>     writeln(r.take(max(a.length, b.length)));

Hi Marc,

  Thank you, I have made a small update as the Server Array is 
fixed length and the Socket array would be dynamic so made the 
below changes as now it is working as expected
Prog:1
import std.stdio;
import std.range;
import std.range.primitives;
import std.algorithm.comparison : max;

void main()
{
      auto a = [1,2,3]; 				     // E.g :Server Array
      auto b = [1,2,3,4,5,6,7,8,9,10,11,12];          // E.g: 
Socket Array
	 auto r = roundRobin(a.cycle, b.cycle);
	 writeln(r.take(max(a.length, b.length * 2)));
  }

From,
Vino.B


More information about the Digitalmars-d-learn mailing list