随机访问某地址
一、简单版
1、json数据,url地址逗号分隔
"HttpRequestUrl.Report": "http://localhost:5000/,http://localhost:5001/",
2、
string url=HttpRequest.HttpUrl(configuration["HttpRequestUrl.Report"]); //string url =configuration["HttpRequestUrl.Report"] +"api/sys/login"; url = url + "api/sys/login"; string parm = JsonConvert.SerializeObject(new {name=loginModel.Name,pwd=loginModel.Pwd}); string r = GWHomeBigData.Util.HttpRequest.HttpPost(url, parm);
3、
public static string HttpUrl(string urls) { if (string.IsNullOrWhiteSpace(urls)) return urls; var urlArray = urls.Split(','); if (urlArray.Length == 1) return urlArray[0]; int len = urlArray.Length; var uuid = Guid.NewGuid().ToByteArray(); int seed = DateTime.Now.Millisecond + uuid.Sum(t=>t); Random random = new Random(seed); int index = random.Next(0, len); string url = urlArray[index]; Console.WriteLine($"随机地址:{url}"); return url; }
二、问题是非线程安全的
1、
public class GetRandUrl { private static int len = 0; private static string[] urls; public static string GetUrl(List<UrlItem> urlItems) { if (urlItems == null || urlItems.Count() == 0) return string.Empty; if (urlItems.Count() == 1) return urlItems[0].url; if (len == 0) { List<string> strList = new List<string>(); urlItems.ForEach(t => { for(int i = 0; i < t.weight; i++) { strList.Add(t.url); } }); urls = strList.ToArray(); len = urls.Length; } var uuid = Guid.NewGuid().ToByteArray(); int seed = DateTime.Now.Millisecond + uuid.Sum(t => t); Random random = new Random(seed); int index = random.Next(0, len); string url = urls[index]; Console.WriteLine($"随机地址:{url}"); return url; } }
2、
List<UrlItem> urlItems = new List<UrlItem>() { new UrlItem{ url="参数"}, new UrlItem{ url="返回",weight=2}, new UrlItem{ url="boolean"} }; List<Task> tasks = new List<Task>(); for (int i = 0; i < 10; i++) { tasks.Add(Task.Run(() => { GetRandUrl.GetUrl(urlItems); })); } Task.WaitAll(tasks.ToArray());
3、
public class UrlItem { public string url { get; set; } private int _weight; public int weight { get { if (_weight == 0) return 1; else return _weight; } set { if (value == 0) _weight = 1; else _weight = value; } } }

浙公网安备 33010602011771号