新聞中心
socket超時什么意思?
你好,這分為兩種情況。Socket.connect連接超時有二種情況:

創(chuàng)新互聯(lián)是一家企業(yè)級云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營經(jīng)驗(yàn)。主營GPU顯卡服務(wù)器,站群服務(wù)器,電信內(nèi)江機(jī)房,海外高防服務(wù)器,成都機(jī)柜租用,動態(tài)撥號VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。
1.由于網(wǎng)絡(luò)的問題,TCP/IP三次握手時間>timeout的設(shè)置時間。
這在國外訪問weibo時,并且網(wǎng)絡(luò)環(huán)境極差的情況下有可能發(fā)生。解決的辦法:調(diào)大socket.connect方法中的timeout參數(shù)值,比如50s,linux默認(rèn)最高是70s,如果超過70s沒有意義,linux會采用70s.但是當(dāng)調(diào)大之后,發(fā)現(xiàn)不到10s就報(bào)timeout exception。
通過國外的機(jī)器ping api.weibo.com發(fā)現(xiàn)unreachable。說明客戶端在傳輸層之下的網(wǎng)絡(luò)層就發(fā)現(xiàn)連個Syn的報(bào)文都發(fā)不出去,更不用說三次握手了,客戶端直接失敗并拋timeout exception。經(jīng)驗(yàn):在connection timeout診斷的第一步應(yīng)該是ping一下確認(rèn)網(wǎng)絡(luò)層沒有問題。注:客戶端設(shè)置了timeout,但并不會等到超時才返回異常。客戶端只要第一時間發(fā)現(xiàn)連接失敗,就會拋timeout exception。
2.如果timeout設(shè)置的時間足夠,但是由于服務(wù)器端的處理能力較差,比如緩沖連接隊(duì)列較小,而應(yīng)用層的處理能力沒有連接緩沖快,導(dǎo)致緩沖連接占滿,而拒絕新的連接。
在服務(wù)端因?yàn)檫B接隊(duì)列占滿而拒絕服務(wù)的期間,客戶端的通過TCP協(xié)議重試三次。每次的時間翻倍。
如果三次時間的累加
網(wǎng)絡(luò)編程中阻塞和非阻塞socket的區(qū)別?
阻塞:一般的I/O操作可以在新建的流中運(yùn)用.在服務(wù)器回應(yīng)前它等待客戶端發(fā)送一個空白的行.當(dāng)會話結(jié)束時,服務(wù)器關(guān)閉流和客戶端socket.如果在隊(duì)列中沒有請示將會出現(xiàn)什么情況呢?那個方法將會等待一個的到來.這個行為叫阻塞.accept()方法將會阻塞服務(wù)器線程直到一個呼叫到來.當(dāng)5個連接處理完閉之后,服務(wù)器退出.任何的在隊(duì)列中的呼叫將會被取消.
非阻塞:非阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡(luò)調(diào)用時,不管是否執(zhí)行成功,都立即返回。比如調(diào)用recv()函數(shù)讀取網(wǎng)絡(luò)緩沖區(qū)中數(shù)據(jù),不管是否讀到數(shù)據(jù)都立即返回,而不會一直掛在此函數(shù)調(diào)用上。在實(shí)際Windows網(wǎng)絡(luò)通信軟件開發(fā)中,異步非阻塞套接字是用的最多的。平常所說的C/S(客戶端/服務(wù)器)結(jié)構(gòu)的軟件就是異步非阻塞模式的
為什么我的socket的read方法沒有阻塞,直接?
一、你調(diào)用read的時候,實(shí)際上調(diào)用的是socketchannel的read方法,而你設(shè)置的阻塞模式是ServerSocketChannel的模式,所以調(diào)用read時依然會采用默認(rèn)的阻塞方式,如果你希望用非阻塞的方式,只要設(shè)置一下socketchannel的阻塞模式就OK了。
二、默認(rèn)情況下,read的方法是阻塞模式的,所以沒有辦法設(shè)置他的超時時間,如果客戶端異常退出,當(dāng)前的連接將永遠(yuǎn)等待下去,如果你修改成非阻塞模式就沒有這個問題了,非阻塞模式你可以判斷read返回值,如果超過N時間返回值一直都是0,就把當(dāng)前的連接關(guān)閉。
三、我并沒有這樣混合用過,還沒遇到過這樣的問題,我猜想有可能是跟關(guān)閉的socketchannel、socket等等有關(guān)吧,可能關(guān)閉socket和關(guān)閉channel有些區(qū)別,我也不確定,反正建議你,想要NIO就用NIO,要是想要serversocket和scoket,那就只用這兩個,盡量不要混合使用。希望對你有幫助。
到此,以上就是小編對于socketaccept阻塞的問題就介紹到這了,希望這3點(diǎn)解答對大家有用。
分享名稱:socket超時什么意思?windowssocket阻塞
文章來源:http://www.dlmjj.cn/article/coisicj.html


咨詢
建站咨詢
