欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现Nginx平滑加权轮询算法

程序员文章站 2023-12-17 15:11:34
本文实例为大家分享了c#实现nginx平滑加权轮询算法的具体代码,供大家参考,具体内容如下 代码很简单,算法很经典!  1. 定义实体类 pub...

本文实例为大家分享了c#实现nginx平滑加权轮询算法的具体代码,供大家参考,具体内容如下

代码很简单,算法很经典! 

1. 定义实体类

public struct serverconfig
 {
  //初始权重
  public int weight {get;set;}

  //当前权重
  public int current {get;set;}

  //服务名称
  public string name {get;set;}
 }

2. 算法

public static int nextserverindex(serverconfig[] serverconfigarray)
 {
  int index = -1;
  int total = 0;
  int size = serverconfigarray.count();
  for(int i = 0; i< size; i++)
  {
   serverconfigarray[i].current += serverconfigarray[i].weight;
   total += serverconfigarray[i].weight;
   if (index == -1 || serverconfigarray[index].current < serverconfigarray[i].current)
   {
    index = i;
   }
  }
  serverconfigarray[index].current -= total;
  return index;
 }

3.调用

static void main(string[] args)
  {       
    var sv = new serverconfig[] {
      new serverconfig{name="a", weight = 4},
      new serverconfig{name="b", weight = 2},
      new serverconfig{name="c", weight = 1}
    };
    int index = 0;
    int sum = sv.sum(m => m.weight);
    for(int i=0; i<sum; i++)
    {
      index = nextserverindex(sv);
      console.writeline("{0}{1}", sv[index].name, sv[index].weight);
    }
    console.read();
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: