服務(wù)端異常是怎么回事 如何優(yōu)雅處理前端異常?
如何優(yōu)雅處理前端異常?隨著業(yè)界對用戶體驗(yàn)的重視,前端異常處理也得到了重視。像過去一樣,很少有網(wǎng)站關(guān)心你的前端是否會(huì)異常,但是現(xiàn)在更大的網(wǎng)站會(huì)收集前端異常,然后向服務(wù)器報(bào)告。。讓我們逐一看看。1. 異常
如何優(yōu)雅處理前端異常?
隨著業(yè)界對用戶體驗(yàn)的重視,前端異常處理也得到了重視。像過去一樣,很少有網(wǎng)站關(guān)心你的前端是否會(huì)異常,但是現(xiàn)在更大的網(wǎng)站會(huì)收集前端異常,然后向服務(wù)器報(bào)告。
。讓我們逐一看看。
1. 異常捕獲
每個(gè)主流開發(fā)語言都使用try。。。抓住。。。捕捉異常。當(dāng)然,前端JavaScript也不例外。最簡單的代碼如下:
try{…}catch(E){控制臺.log(e)
]盡管我們可以嘗試。。。抓住。。。對于異常的處理,也存在一個(gè)問題:代碼會(huì)變得越來越復(fù)雜和臃腫,這種方法只適用于片段代碼的異常捕獲,全局異常捕獲非常麻煩。
所以有更好的方法。
window.oner錯(cuò)誤它不僅提供了錯(cuò)誤代碼的行號,還提供了錯(cuò)誤借用信息,對我們準(zhǔn)確定位異常非常有幫助。
2. 異常報(bào)告
當(dāng)我們捕獲前端異常時(shí),我們需要將異常報(bào)告給后端服務(wù)器。我們通常通過Ajax提交。為了降低后端壓力,我們建議如果前端異常類似,只報(bào)告一次。
經(jīng)過以上處理,當(dāng)當(dāng)前端出現(xiàn)異常時(shí),我們可以實(shí)時(shí)通知程序員進(jìn)行檢查和修復(fù)。
服務(wù)端返回結(jié)果長度為零異常是什么原因?
當(dāng)TCP握手完成三次時(shí),服務(wù)器TCP將連接放入已建立的連接隊(duì)列。此時(shí),客戶機(jī)給出rst,然后accept返回。但是,accept返回一個(gè)econnectabort錯(cuò)誤。這不是致命錯(cuò)誤。
2. 服務(wù)器進(jìn)程終止的過程如下:A.終止服務(wù)進(jìn)程。作為進(jìn)程善后處理的一部分,所有打開的文件描述符都是關(guān)閉的,這導(dǎo)致服務(wù)器TCP(注意“server”和“servertcp”是不同的概念)向客戶端發(fā)送fin,客戶端TCP用ACK響應(yīng)。
b.客戶端正在阻止scanf功能(基于上一篇文章中提到的客戶端模型),這會(huì)導(dǎo)致客戶端不知道服務(wù)器TCP已關(guān)閉連接。
c和客戶端調(diào)用write,在scanf返回后將數(shù)據(jù)發(fā)送到服務(wù)器。由于服務(wù)端已被kill刪除,服務(wù)器端TCP向客戶端TCP發(fā)送RST。
d,客戶端在發(fā)送數(shù)據(jù)后立即調(diào)用read來讀取數(shù)據(jù)。由于FIN的第一步,read立即返回0(表示EOF),但是客戶端希望接收剛才發(fā)送的數(shù)據(jù)而不是FIN。如果客戶端隨后向服務(wù)器發(fā)送數(shù)據(jù),它將誘導(dǎo)服務(wù)器TCP向服務(wù)器發(fā)送SIGPIPE信號,因?yàn)樗谙蚪邮誶st的套接字寫入數(shù)據(jù)時(shí)將接收此信號。問題的本質(zhì)是客戶端同時(shí)處理兩個(gè)描述符--套接字和用戶輸入,程序只在一個(gè)源上被阻塞。這個(gè)問題可以用1來解決。設(shè)置非阻塞模式。2使用Select和epoll。
3. 在客戶端TCP發(fā)送數(shù)據(jù)之后,它將嘗試重新傳輸,直到它放棄并向客戶端進(jìn)程返回錯(cuò)誤消息。Etimeout表示沒有相應(yīng)的連接,ehostunach表示路由器確定主機(jī)不可訪問。
4. 服務(wù)器崩潰后重新啟動(dòng)
由于服務(wù)器TCP丟失了以前的連接信息,這將導(dǎo)致服務(wù)器發(fā)送rst,此時(shí)客戶端塊在讀取函數(shù)中,這將導(dǎo)致返回econnectreset錯(cuò)誤。
5。當(dāng)服務(wù)器關(guān)閉時(shí)
init進(jìn)程將首先向所有進(jìn)程發(fā)送SIGTERM(此信號可以被捕獲),然后在一段時(shí)間后向仍在運(yùn)行的程序發(fā)送sigkill(次),這與終止服務(wù)器進(jìn)程是一樣的。