[英]The best way for a client to wait for a websocket?
我想連接到服務器,然后在連接打開后立即執行一些操作。 但是,如果連接停止,我想陷阱,而不是做的東西,也許取消等待連接。
function doStuff () {
var connection = new WebSocket('wss://someURL');
//do some stuff here as soon as socket open but trap for stall
}
我正在尋找一些功能,如
connection.addEventListener('timeout',...);
因為在配置我的WS服務器不響應(模擬太慢的服務器)時,Chrome的網絡檢查員會永久地將連接顯示為“待定”。 由於缺乏該功能,我的第一個傳遞是:
function doStuff () {
var connection = new WebSocket('wss://someURL');
connection.addEventListener('open', onOpen, false);
var socketTimer = setTimeout(onNotResponding, 10000);
function onOpen () {
clearTimeout(socketTimer);
//do my stuff here.
}
function onNotResponding () {
//the server is not responding, how do I "cancel" the connection request here?
}
}
(這是一個問題的答案:等待websocket變得可用的最佳方式,我認為這是本帖的目的。無論如何,我在這里留下我的答案,或許其他讀者會發現它有用)。
這是我解決它的方式:
var socket;
var socketOnMessage = function(msg) {
console.log("received " + msg.data);
};
var socketOnOpen = function(msg) {
console.log("websocket opened");
};
var socketOnClose = function(msg) {
console.log('websocket disconnected - waiting for connection');
websocketWaiter();
};
function websocketWaiter(){
setTimeout(function(){
socket = new WebSocket(websocketUrl);
socket.onopen = socketOnOpen;
socket.onclose = socketOnClose;
socket.onmessage = socketOnMessage;
}, 1000);
};
websocketWaiter();
在onClose事件處理程序中,再次調用websocketWaiter。
在websocketWaiter中,您必須重新初始化事件處理程序,因為您創建了一個新對象。
快速谷歌搜索顯示了這一點。
https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#close%28%29
connection.close();
請注意,您在Chrome開發者工具中看到的待處理連接是初始的http連接,然后保持打開以允許Web套接字進行雙向通信。 你不會看到真正的websocket流量。
為此,您可以在此處安裝免費的WireShark網絡流量嗅探器,查看此解決方案:
您還可以使用顯示過濾器過濾以僅顯示WebSocket數據包:(websocket)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.