2012-09-17 53 views
5

我編碼在Java的WebSocket服務器。當我使用的WebSocket連接到Firefox中的服務器,我發現兩個連接建立,其中一個從來不發送任何數據...
我的Firefox版本是15.0.1
Chrome瀏覽器中相同的代碼運行正常,連接一次,只建立一個連接。
有沒有人有這樣的麻煩?的WebSocket在Firefox中建立兩個連接

有服務器的代碼:

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中,我得到這個在我的服務器控制檯:

accept socket:socket [addr =/127.0.0.1,port = 56935,localport = 11111]
accept socket:Socket [a DDR =/127.0.0.1,端口= 56936,將localPort = 11111]

+0

我在C++中的WebSocket服務器,我沒有看到它正從Firefox的兩個連接。你正在使用哪個版本? – Wutz

+0

我的firefox版本是15.0.1 – takamachi

+0

我在C中製作了一個簡單的服務器,並在接受連接器時打印一行。控制檯中還印有兩行。 – takamachi

回答

4

這是在Firefox 15的問題,即是/將是固定在Firefox 16:https://bugzilla.mozilla.org/show_bug.cgi?id=789018

火狐15被操作的方式推測連接這對HTTP/SPDY來說很好,但是因爲WebSocket握手是HTTP 1.0(而不是1.1),所以它不能重新使用推測連接並必須建立第二個連接。

如果你的服務器是正常的多線程,可以接受多個連接,但它是討厭它不是一個關鍵問題。

+0

謝謝!正如你所說,這不是一個關鍵問題。我只是想知道原因。在我的代碼中,我關閉了不發送任何數據的連接。 – takamachi

相關問題