socket超時(shí)什么意思?
你好,這分為兩種情況。Socket.connect連接超時(shí)有二種情況:
1.由于網(wǎng)絡(luò)的問(wèn)題,TCP/IP三次握手時(shí)間>timeout的設(shè)置時(shí)間。
這在國(guó)外訪問(wèn)weibo時(shí),并且網(wǎng)絡(luò)環(huán)境極差的情況下有可能發(fā)生。解決的辦法:調(diào)大socket.connect方法中的timeout參數(shù)值,比如50s,linux默認(rèn)最高是70s,如果超過(guò)70s沒(méi)有意義,linux會(huì)采用70s.但是當(dāng)調(diào)大之后,發(fā)現(xiàn)不到10s就報(bào)timeout exception。
通過(guò)國(guó)外的機(jī)器ping api.weibo.com發(fā)現(xiàn)unreachable。說(shuō)明客戶(hù)端在傳輸層之下的網(wǎng)絡(luò)層就發(fā)現(xiàn)連個(gè)Syn的報(bào)文都發(fā)不出去,更不用說(shuō)三次握手了,客戶(hù)端直接失敗并拋timeout exception。經(jīng)驗(yàn):在connection timeout診斷的第一步應(yīng)該是ping一下確認(rèn)網(wǎng)絡(luò)層沒(méi)有問(wèn)題。注:客戶(hù)端設(shè)置了timeout,但并不會(huì)等到超時(shí)才返回異常。客戶(hù)端只要第一時(shí)間發(fā)現(xiàn)連接失敗,就會(huì)拋timeout exception。
2.如果timeout設(shè)置的時(shí)間足夠,但是由于服務(wù)器端的處理能力較差,比如緩沖連接隊(duì)列較小,而應(yīng)用層的處理能力沒(méi)有連接緩沖快,導(dǎo)致緩沖連接占滿(mǎn),而拒絕新的連接。
在服務(wù)端因?yàn)檫B接隊(duì)列占滿(mǎn)而拒絕服務(wù)的期間,客戶(hù)端的通過(guò)TCP協(xié)議重試三次。每次的時(shí)間翻倍。
如果三次時(shí)間的累加