C# Nginx平滑加权轮询算法
2024-10-14 19:36:05
代码很简单,但算法很经典,话不多说,直接上代码。
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
转载请注名出处,谢谢!
最新文章
- Android轻量缓存框架--ASimpleCache
- android从资源文件中读取文件流显示
- MyEclipse导入jquery等文件报错的解决方案
- jQuery提升性能技巧及个人总结
- CSS/CSS3 如何实现元素水平居中
- 带参数的查询防止SQL注入攻击
- SQL Server 中的跨库视图
- HDU 5768 Lucky7(CRT+容斥原理)
- c语言中重要函数
- FZU 2168 防守阵地 I(前n项和的前n项和)
- EnablePrefetcher注册表项的修改与电脑提速
- Spring框架学习笔记(2)——IOC&;DI
- JavaScript入门学习笔记(表单验证)
- Kali学习笔记9:端口扫描详解(上)
- vue setTimeout 注销
- oracle中varchar2(2)存不了一个汉字的原因
- PyTorch学习系列(九)——参数_初始化
- LPC18xx/43xx SWD/JTAG Debug Connector
- zookeeper 伪分布式安装
- Spring MVC的handlermapping之请求分发如何找到正确的Handler(BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping)