【问题标题】:WebSocket in Firefox establish two connectionFirefox中的WebSocket建立两个连接
【发布时间】:2012-09-09 16:20:39
【问题描述】:

我正在用 Java 编写 WebSocket 服务器。当我在firefox中使用WebSocket连接到服务器时,我发现有两个连接已经建立,其中一个从来没有发送任何数据...
我的 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();
    }
}

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

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

接受套接字:Socket[addr=/127.0.0.1,port=56935,localport=11111]
接受套接字:Socket[addr=/127.0.0.1,port=56936,localport=11111]

【问题讨论】:

  • 我有一个 C++ 中的 websocket 服务器,但我没有看到它从 Firefox 获得两个连接。你用的是哪个版本?
  • 我用 C 语言做了一个简单的服务器,当接受一个连接时只打印一行。控制台中还打印了两行。

标签: java javascript firefox websocket


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!正如你所说,这不是一个关键问题。我只是想知道原因。在我的代码中,我关闭了不发送任何数据的连接。
猜你喜欢
  • 2019-09-15
  • 2014-07-09
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2019-01-07
相关资源
最近更新 更多