2

仅当 websocket-version 为13 aka 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(它似乎使用较旧的 websocket 协议)连接到 Jetty-Server,我会收到警告: WARN:oejw.WebSocketFactory:Unsupported Websocket version:2147483647

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

4

1 回答 1

0

这可能是一个建议,到目前为止,我们无法从 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;
   }
}
于 2013-05-09T07:37:10.657 回答