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