火狐浏览器中的WebSocket建立了两个连接

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

以下是服务器的代码:

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

以下是JavaScript代码:

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!');
};

当我在火狐浏览器中运行此 JS 代码时,我的服务器控制台会显示以下内容:
接受套接字:Socket[addr=/127.0.0.1,port=56935,localport=11111] 接受套接字:Socket[addr=/127.0.0.1,port=56936,localport=11111]

我在用C++编写一个websocket服务器,并且我没有看到它从Firefox获取两个连接。您使用的是哪个版本? - Wutz
我用C语言编写了一个简单的服务器,当接受到连接时只会打印一行。控制台中还会打印两行。 - takamachi
1个回答

4
这是Firefox 15中的一个问题,将在Firefox 16中得到修复:https://bugzilla.mozilla.org/show_bug.cgi?id=789018 Firefox 15正在进行预测连接,这对于HTTP/SPDY来说是可以的,但由于WebSocket握手是HTTP 1.0(而不是1.1),它无法重用预测连接,必须建立第二个连接。
如果您的服务器可以正确处理多个连接,则这不是关键问题,但仍然很烦人。

谢谢!就像你所说,这不是一个关键问题。我只是想知道原因。在我的代码中,我关闭了未发送任何数据的连接。 - takamachi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接