新聞中心
本文轉(zhuǎn)載自微信公眾號(hào)「JeffckyShare」,作者Jeffcky 。轉(zhuǎn)載本文請(qǐng)聯(lián)系JeffckyShare公眾號(hào)。

10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有靜安免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
下面我們結(jié)合如下兩個(gè)異常信息進(jìn)行大致排查分析,到底什么時(shí)候會(huì)拋出這兩個(gè)異常信息呢?
異常信息分析
上述異常說(shuō)到底還是連接問(wèn)題導(dǎo)致,但是連接超時(shí)有很多種情況,比如客戶(hù)端主動(dòng)關(guān)閉連接,又比如服務(wù)端對(duì)請(qǐng)求應(yīng)答超時(shí)等等,這里給出僅我個(gè)人理解的常見(jiàn)情況,大家可以作為基本參考
大前提:根據(jù)項(xiàng)目實(shí)際情況,分析實(shí)際業(yè)務(wù)對(duì)應(yīng)場(chǎng)景,主要考慮以下最后兩個(gè)因素
一是,適當(dāng)觀察下數(shù)據(jù)量大小,萬(wàn)一偶爾出現(xiàn)數(shù)據(jù)量達(dá)到M級(jí)別呢,當(dāng)然既然考慮HTTP,這種情況可以基本忽略
二是,HTTP是否還能承載對(duì)應(yīng)業(yè)務(wù),排除性能瓶頸
三是,評(píng)估考慮是否增加自身平臺(tái)請(qǐng)求超時(shí)時(shí)間設(shè)置?同時(shí)也清楚自身平臺(tái)是否存在請(qǐng)求非常頻繁?以及也一定要了解對(duì)接方是否存在處理請(qǐng)求非常耗時(shí)?
首先,若以上兩者都不是,可以從網(wǎng)絡(luò)原因開(kāi)始分析,比如防火墻設(shè)置(根據(jù)操作系統(tǒng)不同而采取對(duì)應(yīng)方案)、DNS解析設(shè)置(有參數(shù)可配置刷新DNS解析)、IP設(shè)置、代理設(shè)置(有參數(shù)可配置忽略代理)等等
其次,保證啟用客戶(hù)端持久化連接以及增加連接數(shù)限制
- //增加保活機(jī)制,表明連接為長(zhǎng)連接
- client.DefaultRequestHeaders.Connection.Add("keep-alive");
- //啟用?;顧C(jī)制(保持活動(dòng)超時(shí)設(shè)置為 2 小時(shí),并將保持活動(dòng)間隔設(shè)置為 1 秒。)
- ServicePointManager.SetTcpKeepAlive(true, 7200000, 1000);
- //默認(rèn)連接數(shù)限制為2,增加連接數(shù)限制
- ServicePointManager.DefaultConnectionLimit = 512;
然后,依然不能解決問(wèn)題,嘗試使用Socket通信連接
- var client = new HttpClient(new SocketsHttpHandler()
- {
- //考慮忽略使用代理
- UseProxy = false,
- //考慮增加連接數(shù)配置
- MaxConnectionsPerServer = 100,
- //考慮忽略重定向響應(yīng)
- AllowAutoRedirect = false,
- //考慮忽略SSL證書(shū)驗(yàn)證
- SslOptions = new SslClientAuthenticationOptions()
- {
- RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true
- },
- //考慮數(shù)據(jù)壓縮設(shè)置
- AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
- })
- {
- BaseAddress = new Uri(""),
- Timeout = TimeSpan.FromSeconds(30),
- };
最后,還不能解決問(wèn)題,若是Windows通過(guò)WireShark抓包分析,若是Linux使用tcpdump抓包,結(jié)合WireShark分析
如果其他干擾因素都已經(jīng)基本排除,同時(shí)通過(guò)WireShark抓包一切正常,是不是沒(méi)轍了
自信一點(diǎn),適當(dāng)懷疑一下HttpClient本身可能就存在這樣的問(wèn)題呢?
考慮在Windows和Linux系統(tǒng)分別測(cè)試驗(yàn)證,最終確認(rèn)是否是HttpClient底層在兩者系統(tǒng)上機(jī)制的有些不同,導(dǎo)致存在的bug呢?
當(dāng)前標(biāo)題:.NETCoreHttpClient請(qǐng)求異常思考
網(wǎng)站路徑:http://m.fisionsoft.com.cn/article/djgecce.html


咨詢(xún)
建站咨詢(xún)
