我想连接到服务器,然后在连接打开后立即执行一些操作。但是,如果连接停止,我想陷阱,而不是做这些东西,也许取消等待连接。
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?
}
}
答案 0 :(得分:3)
(这是一个问题的答案:等待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中,您必须重新初始化事件处理程序,因为您创建了一个新对象。
答案 1 :(得分:0)
快速谷歌搜索显示了这一点 https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#close%28%29
connection.close();
答案 2 :(得分:-1)
请注意,您在Chrome开发者工具中看到的待处理连接是初始http连接,然后保持打开以允许Web套接字进行双向通信。 你不会看到真正的websocket流量。
为此,您可以在此处安装免费的WireShark网络流量嗅探器:
How to debug websockets with wireshark
您还可以使用显示过滤器过滤以仅显示WebSocket数据包:(websocket)