Firefox中的WebSocket建立两个连接

tak*_*chi 5 javascript java firefox websocket

我正在用Java编写WebSocket服务器.当我使用WebSocket连接到firefox中的服务器时,我发现建立了两个连接,其中一个从未发送任何数据...
我的firefox版本是15.0.1
在Chrome中运行的相同代码是OK,连接一次,建立只有一个连接.
有人有这样的麻烦吗?

有服务器的代码:

ServerSocket svrSock = new ServerSocket();
svrSock.bind(new InetSocketAddress("0.0.0.0", 11111));
while(true) {
    try {
        // accept connection
        Socket clientSock = svrSock.accept();
        // print the socket which connected to this server
        System.out.println("accept socket: " + clientSock);

        // run a thread for client
        new ClientThread(clientSock).start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

还有js代码:

var url = 'ws://localhost:11111/test/';
var ws = new WebSocket(url);
ws.onopen = function(){
    console.log('connected!');
    ws.send(11111);
    ws.close();
};
ws.onclose = function(){
    console.log('closed!');
};
Run Code Online (Sandbox Code Playgroud)

当我在firefox中运行这个js代码时,我在服务器控制台中得到了这个:

accept socket:Socket [addr =/127.0.0.1,port = 56935,localport = 11111]
accept socket:Socket [addr =/127.0.0.1,port = 56936,localport = 11111]

kan*_*aka 4

这是 Firefox 15 中的问题,将在 Firefox 16 中修复:https://bugzilla.mozilla.org/show_bug.cgi ?id=789018

Firefox 15 正在进行推测性连接,这对于 HTTP/SPDY 来说很好,但由于 WebSocket 握手是 HTTP 1.0(而不是 1.1),因此它无法重新使用推测性连接,并且必须建立第二个连接。

如果您的服务器是正确的多线程并且可以接受多个连接,那么这不是一个关键问题,但它很烦人。