2013-03-21 27 views
2

只有當websocket版本是又名RFC 6455可用時,我想使用Jetty-Server(版本8.1.9)的websockets。如果它不可用,將使用http-fallback-solution。如何在瀏覽器中使用javascript查找websocket協議版本?

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

如果我使用帶有Safari 5.0.2的iPad連接到Jetty服務器(顯然使用較舊的websocket協議)我得到一個警告: 警告:oejw.WebSocketFactory:不支持WebSocket的版本:2147483647

我無法找到一種方式來獲得訪問或更改JavaScript中的握手請求。這是不可能的嗎?任何解決方法?

+2

'2147483647'似乎是相當先進的,如果目前的版本是'13' :-) – Bergi 2013-03-21 15:46:59

回答

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