5

私はJavaでWebSocketサーバーをコーディングしています。WebSocketを使用してFirefoxのサーバーに接続すると、2つの接続が確立され、そのうちの1つはデータを送信しません...
Firefoxのバージョンは15.0.1
ですChromeで実行された同じコードはOKです。 1つの接続のみ。
こんなトラブルはありますか?

サーバーのコードは次のとおりです。

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

このjsコードをFirefoxで実行すると、サーバーコンソールに次のように表示されます。

ソケットを受け入れる:Socket [addr = / 127.0.0.1、port = 56935、localport = 11111]
ソケットを受け入れる:Socket [addr = / 127.0.0.1、port = 56963、localport = 11111]

4

1 に答える 1

4

これはFirefox15の問題であり、firefox 16で修正されます:https ://bugzilla.mozilla.org/show_bug.cgi?id = 789018

Firefox 15は、HTTP / SPDYで問題ない投機的接続を実行していますが、WebSocketハンドシェイクはHTTP 1.0(1.1ではなく)であるため、投機的接続を再利用できず、2番目の接続を確立する必要があります。

サーバーが適切にマルチスレッド化されており、複数の接続を受け入れることができる場合、これは重大な問題ではありませんが、煩わしいものです。

于 2012-09-17T14:37:50.117 に答える