[英]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.