C# Nginx平滑加权轮询算法

代码很简单,但算法很经典,话不多说,直接上代码。

    public struct ServerConfig
{
/// <summary>
/// 初始权重
/// </summary>
public int Weight { get; set; }
/// <summary>
/// 当前权重
/// </summary>
public int Current { get; set; }
/// <summary>
/// 服务名称
/// </summary>
public string Name { get; set; }
}

  

        public static int NextServerIndex(ServerConfig[] ss)
{
int index = -1;
int total = 0;
int size = ss.Count(); for (int i = 0; i < size; i++)
{
ss[i].Current += ss[i].Weight;
total += ss[i].Weight; if (index == -1 || ss[index].Current < ss[i].Current)
{
index = i;
}
} ss[index].Current -= total;
return index;
}

  

        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();
}

  参考文献:http://blog.csdn.net/gqtcgq/article/details/52076997

文章出处:http://www.cnblogs.com/anech/p/6704240.html

转载请注名出处,谢谢!

上一篇:C#字符串和16进制字符串之间的转换


下一篇:循环对XML文档添加Attribute以及移除Element 【转】