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

时间:2013-03-21 15:38:20

标签: javascript browser websocket jetty-8

仅当websocket-version 13 又名 RFC 6455 可用时,我才想使用带有Jetty-Server(版本8.1.9)的websockets。如果没有,将使用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(显然使用较旧的websocket协议)连接到Jetty-Server,我会收到警告: 警告:oejw.WebSocketFactory:不支持的Websocket版本:2147483647

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

1 个答案:

答案 0 :(得分:0)

这可能是一个建议,截至目前我们无法从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;
   }
}