Javascript 如何更改打开WebSocket的超时?
又短又甜: 在尝试打开一段时间后,如何告诉WebSocket停止或“关闭” 我目前正在开发一个类似Kahoot的web应用程序,玩家可以通过手机连接进行游戏。该游戏完全使用普通JavaScript在后台运行所有内容,并使用WebSocket与django Channel游戏服务器通信。除了玩家意外锁定手机或切换应用程序并关闭WebSocket的情况外,这款游戏玩得很好。我可以很容易地打开一个新的连接,但由于某些原因,在mobile safari中,WebSocket需要很长时间才能放弃连接 例如:Javascript 如何更改打开WebSocket的超时?,javascript,ios,websocket,mobile-safari,django-channels,Javascript,Ios,Websocket,Mobile Safari,Django Channels,又短又甜: 在尝试打开一段时间后,如何告诉WebSocket停止或“关闭” 我目前正在开发一个类似Kahoot的web应用程序,玩家可以通过手机连接进行游戏。该游戏完全使用普通JavaScript在后台运行所有内容,并使用WebSocket与django Channel游戏服务器通信。除了玩家意外锁定手机或切换应用程序并关闭WebSocket的情况外,这款游戏玩得很好。我可以很容易地打开一个新的连接,但由于某些原因,在mobile safari中,WebSocket需要很长时间才能放弃连接 例如
的情况下丢弃WebSocket。关闭并正确关闭连接
非常感谢 在中的任何地方都没有提到连接超时,在任何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);
});
你读过这么多问题吗?什么是客户端开发环境?在这里,您可以检查webSocket接口,查看它提供的超时或重试值。它只是一个浏览器吗?还是别的?@jfriend00它只是两个浏览器:Android上的Chrome和iOS上的Safari。我一直在寻找超时值和重试值,但没有找到太多。如果有人能给我指出正确的方向,那就太棒了。使用你的代码建立WebSocket非常有效,但我在调用该函数返回的对象时得到
WebSocket.send不是一个函数。我遗漏了什么吗?@kawub-因为我推荐的名为websocket
的代码中没有任何变量,所以我不知道你在做什么。和往常一样,我只能在我能看到的代码上提供帮助。您可以在问题的末尾添加您尝试的代码,以便我可以看到它。此函数返回承诺,而不是webSocket对象。你必须像我所展示的那样使用这个承诺才能从中获得插座。