[英]Socket.IO - How to change timeout value option on client side?
我使用Socket.IO 0.9.16建立連接:
io.connect(url)
但是,當服務器死機時,檢測到服務器錯誤需要2分鍾的超時時間。
我已經嘗試通過設置將超時減少到5秒:
io.connect(url, {'timeout': 5000, 'connect_timeout': 5000})
但沒有成功......我怎么能這樣做?
這里面臨的挑戰是,有許多不同的設置可以相互交互,還有一些重試邏輯會使socket.io超時不是你通常所期望的。 我應該補充一點,我熟悉socket.io 1.0+,而不是0.9雖然這可能適用於兩者。
讓我們回顧一下socket.io連接的工作原理。
timeout
值。 connect_error
,如果您在套接字上使用socket.on('connect_error', function() {...});
注冊該消息socket.on('connect_error', function() {...});
,你會看到connect_error
事件。 connect_error
不是超時。 因此,如果連接快速失敗(通常在服務器剛剛關閉時失敗),那么您永遠不會獲得常規超時,並且傳遞給io({timeout: 5000})
的超時參數io({timeout: 5000})
實際上不會生效。 只有當與服務器的連接花費很長時間(例如過於繁忙的服務器或接受TCP連接的服務器,但響應速度很慢)時才會生效。 這通常不是在服務器剛剛關閉或無法訪問時發生的情況。 connect_error
它會標記此socket.io連接以進行重試。 reconnectionDelay
選項是公式的一部分,但是在查看代碼時,還有一種退避算法可以延長重試之間的時間,重試次數也會增加。 因此,足以說明,有一些算法在重試之前計算給定的延遲,每次重試都會有所不同。 reconnectionAttempts
,指定最大重新連接嘗試次數。 如果不傳遞,則默認為無窮大。 但是,如果你通過10
,那么它會在連續10次連接失敗后放棄。 reconnectionAttempts
,那么在多次連接嘗試失敗之后,您將在套接字上獲得reconnect_failed
事件並且它將放棄。 timeout
選項僅適用於單次重新連接嘗試,而不適用於它一直嘗試連接的總時間。 在我一直在試驗的示例測試頁面中,我能夠實現我自己的傳統連接超時,如下所示:
var socket = io(...);
// set connect timer to 5 seconds
socket._connectTimer = setTimeout(function() {
socket.close();
}, 5000);
socket.on('connect', function() {
// socket connected successfully, clear the timer
clearTimeout(socket._connectTimer);
});
無論連接嘗試進行多長時間或在該時間段內發生多次重新連接嘗試,這將成功連接最多等待5秒。 在沒有成功連接的情況下5秒后,它會關閉插座。
在我的測試應用程序中,我可以看到socket.io一遍又一遍地重試連接,直到5秒鍾后,我的計時器觸發,我收到"timeout"
通知,我關閉套接字,它再次停止嘗試重試。
我認為這是connect timeout
io.connect(url, {'timeout':5000, 'connect timeout': 5000})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.