Пример #1
0
        private async Task <bool> TryConnectWebsocketAsync(ClientWebSocket client)
        {
            var clientName = string.IsNullOrEmpty(Name) ? "" : System.Web.HttpUtility.UrlEncode(Name);
            var tag        = string.IsNullOrEmpty(Tag) ? "" : System.Web.HttpUtility.UrlEncode(Tag);

            client.Options.SetRequestHeader("appid", _AppId);
            client.Options.SetRequestHeader("Authorization", GenerateBasicAuthorization(_AppId, _Secret));

            var randomServer = new RandomServers(_ServerNodes);
            int failCount    = 0;

            while (!randomServer.IsComplete)
            {
                var server = randomServer.Next();
                try
                {
                    var websocketServerUrl = "";
                    if (server.StartsWith("https:", StringComparison.CurrentCultureIgnoreCase))
                    {
                        websocketServerUrl = server.Replace("https:", "wss:").Replace("HTTPS:", "wss:");
                    }
                    else
                    {
                        websocketServerUrl = server.Replace("http:", "ws:").Replace("HTTP:", "ws:");
                    }
                    websocketServerUrl  = websocketServerUrl + (websocketServerUrl.EndsWith("/") ? "ws" : "/ws");
                    websocketServerUrl += "?";
                    websocketServerUrl += "client_name=" + clientName;
                    websocketServerUrl += "&client_tag=" + tag;
                    Logger?.LogTrace("AgileConfig Client Websocket try connect to server {0}", websocketServerUrl);
                    await client.ConnectAsync(new Uri(websocketServerUrl), CancellationToken.None).ConfigureAwait(false);

                    Logger?.LogTrace("AgileConfig Client Websocket Connected server {0}", websocketServerUrl);
                    break;
                }
                catch (Exception e)
                {
                    Logger?.LogError(e, "AgileConfig Client Websocket try connect to server occur error .");

                    failCount++;
                }
            }

            if (failCount == randomServer.ServerCount)
            {
                //连接所有的服务器都失败了。
                return(false);
            }

            return(true);
        }
Пример #2
0
        /// <summary>
        /// 通过http从server拉取所有配置到本地
        /// </summary>
        public bool Load()
        {
            int failCount    = 0;
            var randomServer = new RandomServers(ServerNodes);

            while (!randomServer.IsComplete)
            {
                var url = randomServer.Next();
                try
                {
                    var op = new AgileHttp.RequestOptions()
                    {
                        Headers = new Dictionary <string, string>()
                        {
                            { "appid", AppId },
                            { "Authorization", GenerateBasicAuthorization(AppId, Secret) }
                        }
                    };
                    var apiUrl = $"{url}/api/config/app/{AppId}";
                    using (var result = AgileHttp.HTTP.Send(apiUrl, "GET", null, op))
                    {
                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
                        {
                            var respContent = result.GetResponseContent();
                            ReloadDataDictFromContent(respContent);
                            WriteConfigsToLocal(respContent);
                            _isLoadFromLocal = false;

                            Logger?.LogTrace("AgileConfig Client Loaded all the configs success from {0} , Try count: {1}.", apiUrl, failCount);
                            return(true);
                        }
                        else
                        {
                            //load remote configs err .
                            var ex = result.Exception ?? new Exception("AgileConfig Client Load all the configs failed .");
                            throw ex;
                        }
                    }
                }
                catch
                {
                    failCount++;
                }
            }
            if (failCount == randomServer.ServerCount)
            {
                LoadConfigsFromLoacl();
            }
            return(false);
        }
Пример #3
0
        private async Task <bool> TryConnectWebsocketAsync(ClientWebSocket client)
        {
            client.Options.SetRequestHeader("appid", AppId);
            client.Options.SetRequestHeader("Authorization", GenerateBasicAuthorization(AppId, Secret));

            var randomServer = new RandomServers(ServerNodes);
            int failCount    = 0;

            while (!randomServer.IsComplete)
            {
                var server = randomServer.Next();
                try
                {
                    var websocketServerUrl = "";
                    if (server.StartsWith("https:", StringComparison.CurrentCultureIgnoreCase))
                    {
                        websocketServerUrl = server.Replace("https:", "wss:").Replace("HTTPS:", "wss:");
                    }
                    else
                    {
                        websocketServerUrl = server.Replace("http:", "ws:").Replace("HTTP:", "ws:");
                    }
                    websocketServerUrl += "/ws";
                    Logger?.LogTrace("AgileConfig Client Websocket try connect to server {0}", websocketServerUrl);
                    await client.ConnectAsync(new Uri(websocketServerUrl), CancellationToken.None).ConfigureAwait(false);

                    Logger?.LogTrace("AgileConfig Client Websocket Connected server {0}", websocketServerUrl);
                    break;
                }
                catch (Exception e)
                {
                    Logger?.LogError(e, "AgileConfig Client Websocket try connect to server occur error .");

                    failCount++;
                }
            }

            if (failCount == randomServer.ServerCount)
            {
                //连接所有的服务器都失败了。
                return(false);
            }

            return(true);
        }
        public void NextTest()
        {
            var urls = "";

            Assert.ThrowsException <ArgumentNullException>(() => {
                var rs = new RandomServers(urls);
            });

            Console.WriteLine("1");
            urls = "server0";
            RandomServers rs = null;

            for (int i = 0; i < 100; i++)
            {
                rs = new RandomServers(urls);
            }
            Assert.IsFalse(rs.IsComplete);
            var url = rs.Next();

            Console.WriteLine(url);
            Assert.AreEqual("server0", url);
            Assert.IsTrue(rs.IsComplete);

            Console.WriteLine("2");
            urls = "server0,server1";
            for (int i = 0; i < 100; i++)
            {
                rs = new RandomServers(urls);
            }
            Assert.IsFalse(rs.IsComplete);
            var list = new List <string>();

            while (!rs.IsComplete)
            {
                url = rs.Next();
                list.Add(url);
                Console.WriteLine(url);
            }
            Assert.IsTrue(rs.IsComplete);
            Assert.AreEqual(2, list.Count);

            Console.WriteLine("3");
            urls = "server0,server1,server2";
            for (int i = 0; i < 100; i++)
            {
                rs = new RandomServers(urls);
            }
            Assert.IsFalse(rs.IsComplete);
            list = new List <string>();
            while (!rs.IsComplete)
            {
                url = rs.Next();
                list.Add(url);
                Console.WriteLine(url);
            }
            Assert.IsTrue(rs.IsComplete);
            Assert.AreEqual(3, list.Count);

            Console.WriteLine("4");
            urls = "server0,server1,server2,server3";
            for (int i = 0; i < 100; i++)
            {
                rs = new RandomServers(urls);
            }
            Assert.IsFalse(rs.IsComplete);
            list = new List <string>();
            while (!rs.IsComplete)
            {
                url = rs.Next();
                list.Add(url);
                Console.WriteLine(url);
            }
            Assert.IsTrue(rs.IsComplete);
            Assert.AreEqual(4, list.Count);
        }