代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C#
】
负载均衡算法
作者:
天远
/ 发布于
2016/9/9
/
935
public class LoadBalance { /// <summary> /// 锁对象 /// </summary> private static readonly object locker = new object(); /// <summary> /// 服务器权重列表 /// </summary> private static List<int> weightList= new List<int>(); /// <summary> /// 当前索引 /// </summary> private static int currentIndex; /// <summary> /// 当前权重 /// </summary> private static int currentWeight; private static int maxWeight; /// <summary> /// 最大公约数 /// </summary> private static int gcd; static LoadBalance() { currentIndex = -1; currentWeight = 0; //获取服务器权重列表,从配置文件 weightList = GetWeightList(); maxWeight = GetMaxWeight(weightList); gcd = GetMaxGCD(weightList); } private static List<int> GetWeightList() { List<int> list= new List<int>(); list.Add(3); list.Add(1); list.Add(1); list.Add(4); list.Add(1); list.Add(7); return list; } [MethodImpl(MethodImplOptions.Synchronized)] public static int Start() { lock (locker) { int? iWeight = RoundRobin(); if (iWeight != null) { return (int)iWeight; } return weightList[0]; } } /// <summary> /// 获取最大公约数 /// </summary> /// <param name="list">要查找的int集合</param> /// <returns>返回集合中所有数的最大公约数</returns> private static int GetMaxGCD(List<int> list) { list.Sort(new WeightCompare()); int iMinWeight = weightList[0]; int gcd = 1; for (int i = 1; i < iMinWeight; i++) { bool isFound = true; foreach (int iWeight in list) { if(iWeight % i != 0) { isFound = false; break; } } if (isFound) gcd = i; } return gcd; } /// <summary> /// 获取服务器权重集合中的最大权重 /// </summary> /// <param name="list"></param> /// <returns></returns> private static int GetMaxWeight(List<int> list) { int iMaxWeight = 0; foreach (int i in list) { if (iMaxWeight < i) iMaxWeight = i; } return iMaxWeight; } private static int? RoundRobin() { while (true) { currentIndex = (currentIndex + 1)%weightList.Count; if(0 == currentIndex) { currentWeight = currentWeight - gcd; if(0 >= currentWeight) { currentWeight = maxWeight; if (currentWeight == 0) return null; } } if(weightList[currentIndex] >= currentWeight) { return weightList[currentIndex]; } } } } public class WeightCompare : IComparer<int> { public int Compare(int x, int y) { return x - y; } } 调用如下: static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Console.WriteLine("开始......"); int iweight ; for (int i = 0; i < 17; i++) { iweight = LoadBalance.Start(); Console.WriteLine(iweight); } Console.ReadLine(); } }
试试其它关键字
同语言下
.
C#实现的html内容截取
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
去除字符串中的空格,回车,换行符转变成‘;’在按‘
.
按照回车换行符分割字符串
.
文件MD5码 比较,检测文件是否一样
可能有用的
.
C#实现的html内容截取
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
去除字符串中的空格,回车,换行符转变成‘;’在按‘
.
按照回车换行符分割字符串
.
文件MD5码 比较,检测文件是否一样
天远
贡献的其它代码
(
16
)
.
杀死所有脚本
.
小程序页面里要播放的音频的总时长
.
C#打开、保存图像
.
重写HttpServletRequest的获取参数防止xss攻击
.
获取ResultSet列数
.
显示路径下图片
.
返回字符串A的小写格式
.
多行多列数据转为一行
.
负载均衡算法
.
遍历实体的所有属性并为属性赋值
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3