随机访问某地址

一、简单版

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

 

posted @ 2019-03-01 14:50  wjl910  阅读(203)  评论(0)    收藏  举报