2012-09-17 5 views
5

Ich kodiere einen WebSocket-Server in Java. Wenn ich WebSocket verwende, um eine Verbindung mit dem Server in Firefox herzustellen, fand ich zwei Verbindungen hergestellt, und eine von ihnen nie irgendwelche Daten senden ...
Meine Firefox-Version ist 15.0.1
Der gleiche Code in Chrome ausgeführt wird, ist OK, einmal verbinden, nur eine Verbindung herstellen.
Hat jemand die Probleme so?WebSocket in Firefox zwei Verbindungen herstellen

Es ist der Code des Servers:

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

Und es gibt die js Code:

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

Wenn ich laufen diese JS-Code in Firefox, erhalte ich in meinem Server-Konsole:

akzeptieren Socket: Socket [Adr =/127.0.0.1, Port = 56935, Localport = 11111]
akzeptieren Socket: Socket [a ddr =/127.0.0.1, port = 56936, LokalerAnschluss = 11111]

+0

Ich habe einen Websocket-Server in C++ und ich sehe nicht, dass es zwei Verbindungen von Firefox bekommt. Welche Version verwendest du? – Wutz

+0

Meine Firefox-Version ist 15.0.1 – takamachi

+0

Ich mache einen einfachen Server in C, und nur eine Zeile drucken, wenn Sie eine Verbindung akzeptieren. Dort sind auch zwei Zeilen in der Konsole ausgedruckt. – takamachi

Antwort

4

Dies ist ein Problem in Firefox 15, der ist/wird in Firefox 16 behoben werden: https://bugzilla.mozilla.org/show_bug.cgi?id=789018

Firefox 15 macht eine spekulative connect Das ist in Ordnung mit HTTP/SPDY, aber da der WebSocket-Handshake HTTP 1.0 (statt 1.1) ist, kann er die spekulative Verbindung nicht erneut verwenden und muss eine zweite Verbindung herstellen.

Es ist kein kritisches Problem, wenn Ihr Server ordnungsgemäß Multithread ist und mehrere Verbindungen akzeptieren kann, aber es ist ärgerlich.

+0

Vielen Dank! Wie Sie sagen, es ist kein kritisches Thema. Ich will nur den Grund wissen. In meinem Code schließe ich die Verbindung, die keine Daten sendet. – takamachi

Verwandte Themen