2

websocket-version が13 aka RFC 6455が利用可能な場合にのみ、Jetty-Server (バージョン 8.1.9) で websocket を使用したいと思います。利用できない場合は、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
}

iPad と Safari 5.0.2 (古い Websocket プロトコルを使用しているようです) を使用して Jetty-Server に接続すると、次の警告が表示されます: WARN:oejw.WebSocketFactory:Unsupported Websocket version: 2147483647

アクセスを取得したり、Javascript でハンドシェイク要求を変更したりする方法が見つかりませんでした。無理ですか?これに対する回避策はありますか?

4

1 に答える 1

0

今のところ、websocket オブジェクトからプロパティを取得することはできません。したがって、特定の時間、websocket 接続をテストできます。一時的な回避策である可能性があります。

この回避策は、接続が確立されず、websockreadystate がまだ接続している場合のみです。

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 に答える