[英]How do I change the timeout for an opening a WebSocket?
簡短而有趣:嘗試過一段時間后,如何告訴WebSocket停止或“關閉”?
我目前正在開發類似Kahoot的網絡應用程序,玩家可以在其中連接手機。 該游戲使用完全原始的JavaScript在后台運行所有內容,並使用WebSockets與django-channels游戲服務器進行通信。 除玩家意外鎖定手機或切換應用程序並關閉其WebSocket的情況外,游戲都可以正常運行。 我可以輕松地打開一個新的連接,但是由於某種原因,在移動瀏覽器中,WebSocket會永遠放棄連接。
例如:
.close
並正確關閉連接 在我的測試中,第二個WebSocket將嘗試連接至少一分鍾,直到最終讓步並失敗。 只有這樣,我才能嘗試重新連接,並誇大了重新連接播放器的整個過程。
因此,就像我在上面問過的:如何縮短此過程? 有沒有辦法讓WebSocket早點放棄,還是我做錯了呢?
如果我需要添加更多信息,請告訴我。 這是我第一次發貼。
非常感謝!
我沒有在webSocket API規范的任何地方看到連接超時,也沒有在任何webSocket文檔中找到任何提及。 因此,看來您可能必須實現自己的。 這是一種方法:
function connectWebSocket(url, timeout) {
timeout = timeout || 2000;
return new Promise(function(resolve, reject) {
// Create WebSocket connection.
const socket = new WebSocket(url);
const timer = setTimeout(function() {
reject(new Error("webSocket timeout"));
done();
socket.close();
}, timeout);
function done() {
// cleanup all state here
clearTimeout(timer);
socket.removeEventListener('error', error);
}
function error(e) {
reject(e);
done();
}
socket.addEventListener('open', function() {
resolve(socket);
done();
});
socket.addEventListener('error', error);
});
}
// Usage
connectWebSocket(yourURL, 1000).then(function(socket) {
socket.send("hello");
// put other code that uses webSocket here
}).catch(function(err) {
console.log(err);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.