仅当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中获取访问权限或更改握手请求的方法。这不可能吗?有没有解决方法呢?
答案 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;
}
}