第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用 Xamarin Forms 中的 HttpClient 成功減少 DNS 刷新超時(shí)?

如何使用 Xamarin Forms 中的 HttpClient 成功減少 DNS 刷新超時(shí)?

C#
人到中年有點(diǎn)甜 2021-08-29 17:48:54
我正在開發(fā)一個(gè)相當(dāng)復(fù)雜的 Xamarin.Forms 應(yīng)用程序。我們提出了很多 REST 請求。據(jù)報(bào)道,我們的應(yīng)用程序沒有及時(shí)尊重用于負(fù)載平衡的 DNS 故障轉(zhuǎn)移,因此我開始調(diào)查。我正在運(yùn)行 dnsmasq,所以我可以查看應(yīng)用程序何時(shí)發(fā)出 DNS 請求。該代碼目前正在使用HttpWebRequest,我注意到它至少間隔 10 分鐘進(jìn)行 DNS 查詢。我理解部分原因是因?yàn)榇蠖鄶?shù) .NET 網(wǎng)絡(luò)位使用 keepalive 連接。如果我強(qiáng)制標(biāo)頭不使用 keepalive,我當(dāng)然會(huì)看到更高的 DNS 查詢率,但這會(huì)增加網(wǎng)絡(luò)開銷,因此這不是理想的解決方案。但我最初并沒有看到一種明確的方法來控制如何HttpWebRequest進(jìn)行 DNS 查詢??雌饋砗苡邢M铱梢垣@得它的ServicePoint屬性并設(shè)置ConnectionLeaseTimeout它。不幸的是,這會(huì)NotImplementedException導(dǎo)致 Xamarin,因此它不會(huì)成為任何解決方案的一部分。我認(rèn)為這可能HttpClient會(huì)更可配置。我看到很多關(guān)于如何正確使用它的討論,如果你這樣做,你需要為ServicePointManager.DnsRefreshTimeout你希望 DNS 頻繁更新的用例設(shè)置一個(gè)較小的值。但這通常與獲取ServicePoint所需端點(diǎn)的 和 修改 一起完成ConnectionLeaseTimeout,這是不可能的。我一直在使用一個(gè)非常簡單的應(yīng)用程序進(jìn)行測試,該應(yīng)用程序重用 HttpClient 并在我按下按鈕時(shí)發(fā)出相同的請求。用一個(gè)按鈕將這個(gè) ViewModel 放在一些 Xaml 后面:using System;using Xamarin.Forms;using System.Net.Http;using System.Net;namespace TestDns {    public class MainPageViewModel {        private const string _URL = "http://www.example.com";        private HttpClient _httpClient;        private ServicePoint _sp;        public MainPageViewModel() {            var sp = ServicePointManager.FindServicePoint(new Uri(_URL));            _sp = sp;            //_sp.ConnectionLeaseTimeout = 100; // throws NIE            _httpClient = new HttpClient();            ServicePointManager.DnsRefreshTimeout = 100;        }        public Command WhenButtonIsClicked {            get {                return new Command(() => SendRequest());            }        }        private async void SendRequest() {            Console.WriteLine($"{_sp.CurrentConnections}");            var url = "http://www.example.com";            var response = await _httpClient.GetAsync(url);            Console.WriteLine($"{response.Content}");        }    }}沒想到ConnectionLeaseTimeout扔了 我希望這段代碼只緩存 100 毫秒的 DNS 請求,我打算在更多面向生產(chǎn)的測試中選擇一個(gè)更合理的時(shí)間范圍,比如 2-3 分鐘。但是由于我無法讓這個(gè)簡單的示例像我想要的那樣運(yùn)行,所以增加延遲似乎沒有實(shí)際意義。肯定有人在 Xamarin 應(yīng)用程序中遇到過這個(gè)問題?我唯一的解決方案是深入研究并嘗試使用本機(jī)網(wǎng)絡(luò)結(jié)構(gòu)嗎?
查看完整描述

2 回答

?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊

看來Java已經(jīng)決定了解決“有些人不正確地實(shí)施DNS而忽略TTL”的解決方案是通過確保使用Java的設(shè)備不正確地實(shí)施DNS來使問題變得更糟。緩存中的所有 DNS 條目都使用一個(gè) TTL。有一些哲學(xué)辯論,以及是什么讓我在這個(gè)問題中找到了答案,我將其改編為答案。

就 Xamarin 項(xiàng)目而言,將其添加到某處(我在 MainActivity 的早期選擇):

Java.Security.Security.SetProperty("networkaddress.cache.ttl", "<integer seconds>");

將“<整數(shù)秒>”替換為所有 DNS 條目所需的 TTL。請注意,較低的值可能意味著您比以前進(jìn)行了更多的 DNS 查詢,如果您認(rèn)真嘗試節(jié)省網(wǎng)絡(luò)字節(jié),這可能是一個(gè)問題。

我將 Terry Carmen 的答案選為“答案”。


查看完整回答
反對(duì) 回復(fù) 2021-08-29
  • 2 回答
  • 0 關(guān)注
  • 344 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)