gpt4 book ai didi

javascript - 如何使用 javascript 在浏览器中找出 websocket 协议(protocol)版本?

转载 作者:行者123 更新时间:2023-11-30 06:34:23 25 4
gpt4 key购买 nike

只有当 websocket 版本为 13 又名 RFC 6455 可用时,我才想将 websockets 与 Jetty-Server(版本 8.1.9)一起使用。如果它不可用,将使用 http-fallback-solution。

[random Browser Javascript]  <--websocket v13 only--> [Jetty Server Java]

websocket-protocol-version 存储在 WebSocket 握手请求中:

GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com

现在我想在 javascript 中有这样的东西:

if (window.WebSocket)
{
// browser supports websockets
if (bla.websocketversion != 13)
{
// wrong websocket version
// use fallback connection
}
else
{
// use websockets
}
}
else
{
// use fallback connection
}

如果我使用装有 Safari 5.0.2 的 iPad 连接到 Jetty-Server(它似乎使用了较旧的 websocket 协议(protocol)),我会收到警告:警告:oejw.WebSocketFactory:不支持的 Websocket 版本:2147483647

我找不到在 Javascript 中获取访问权限或更改握手请求的方法。不可能吗?有什么解决方法吗?

最佳答案

这可能是一个建议,截至目前我们无法从 websocket 对象获取任何属性。所以我们可以在特定时间内测试 websocket 连接。这可能是一种临时解决方法。

此解决方法仅在连接未建立时,websocket 就绪状态仍在连接中

function init()
{

_ws = new WebSocket("ws://example.com");

_ws.onopen = onopen();

_ws.onclose = onclose();

setTimeout(function () {connectionCheck(_ws)}, 5000);

}


function connectionCheck(_ws)
{


if(_ws.readyState == 0)
{
//call your fallback sollution
}
else
{
return;
}
}

关于javascript - 如何使用 javascript 在浏览器中找出 websocket 协议(protocol)版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15551898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com