如何在浏览器中使用javascript找到websocket协议版本?

How can I find out the websocket-protocol version in a Browser using javascript?

本文关键字:websocket 找到 协议 版本 javascript 浏览器      更新时间:2023-09-26

我想使用websockets与Jetty-Server(版本8.1.9)只有当websocket版本是13又名RFC 6455是可用的。如果它不可用,将使用http-fallback解决方案。

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

WebSocket协议版本存储在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
}

如果我使用iPad与Safari 5.0.2(显然使用旧的websocket协议)连接到Jetty-Server,我得到一个警告:警告:oejw。WebSocketFactory:不支持的Websocket版本:2147483647

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

这可能是一个建议,因为现在我们无法从websocket对象中获得任何属性。因此,我们可以在特定的时间内测试websocket连接。这可能是一个临时解决方案。

此解决方案仅在连接未建立时使用,websocket readystate仍在连接

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;
   }
}