2012-09-17 14 views
5

Sto codificando un server WebSocket in Java. Quando utilizzo WebSocket per connettersi al server in firefox, ho trovato due connessioni stabilite e una di esse non invia mai dati ...
La mia versione di firefox è 15.0.1
Lo stesso codice eseguito in Chrome è OK, connetti una volta, stabilisci solo una connessione.
Qualcuno ha il problema in questo modo?WebSocket in Firefox stabilisce due connessioni

C'è il codice del server:

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

E c'è il codice 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!'); 
}; 

Quando ho eseguito questo js codice di Firefox, ottengo questo nel mio console del server:

accetta socket: Socket [addr =/127.0.0.1, porta = 56935, localport = 11111]
accetta socket: Socket [a ddr =/127.0.0.1, port = 56936, localport = 11111]

+0

Ho un server Websocket in C++ e non riesco a vederlo ottenere due connessioni da Firefox. Che versione stai usando? – Wutz

+0

La mia versione di firefox è 15.0.1 – takamachi

+0

Realizzo un semplice server in C e stampo una riga solo quando accetto un connent. Ci sono anche due linee stampate in console. – takamachi

risposta

4

Questo è un problema in Firefox 15 che è/sarà risolto in Firefox 16: https://bugzilla.mozilla.org/show_bug.cgi?id=789018

Firefox 15 sta facendo una connessione speculativa che va bene con HTTP/SPDY ma poiché l'handshake WebSocket è HTTP 1.0 (anziché 1.1) non è in grado di riutilizzare la connessione speculativa e deve fare una seconda connessione.

Non è un problema critico se il server è correttamente multithread e può accettare più connessioni, ma è fastidioso.

+0

Grazie! Come dici tu, non è un problema critico. Voglio solo sapere la ragione. Nel mio codice, chiudo la connessione che non invia alcun dato. – takamachi

Problemi correlati