2012-09-17 8 views
5

Java에서 WebSocket 서버를 코딩하고 있습니다. 파이어 폭스에서 서버에 연결할 때 WebSocket을 사용할 때 두 개의 연결이 설정되었고 그 중 하나는 아무 데이터도 보내지 않는다는 것을 알았다.
내 파이어 폭스 버전은 15.0.1
크롬에서 실행되는 동일한 코드는 정상적으로 작동하지만, 한 번 연결하면 하나의 연결 만 설정됩니다.
아무도 이런 문제가 있습니까?Firefox의 WebSocket이 두 연결을 설정합니다.

서버의 코드가있다 :

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 코드가있다 :이 파이어 폭스 코드를 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!'); 
}; 

, 내 서버 콘솔이 얻을이 :

accept 소켓 : 소켓 [addr =/127.0.0.1, 포트 = 56935, localport = 11111]
accept 소켓 : 소켓 [a DDR =/127.0.0.1 포트 = 56,936, localport = 이것은/파이어 (16)에 고정 될 것이다 파이어 폭스 (15)의 문제]

+0

나는 C++로 websocket 서버를 가지고 있는데 파이어 폭스에서 두 개의 연결을 얻지 못한다. 어떤 버전을 사용하고 있습니까? – Wutz

+0

내 firefox 버전은 15.0.1입니다. – takamachi

+0

저는 C로 간단한 서버를 만들고, 연결을 허용 할 때 줄을 출력합니다. 또한 콘솔에 두 줄이 인쇄되어 있습니다. – takamachi

답변

4

11111 : https://bugzilla.mozilla.org/show_bug.cgi?id=789018

파이어 폭스 (15)는 투기 적 연결을하고는 HTTP/SPDY는 괜찮지 만 WebSocket 핸드 셰이크가 HTTP 1.0 (1.1이 아닌)이기 때문에 추측 연결을 다시 사용할 수없고 두 번째 연결을 만들어야합니다.

서버가 제대로 다중 스레드되어 있고 여러 연결을 허용 할 수 있지만 문제는 심각하지 않습니다.

+0

감사합니다! 당신이 말했듯이, 그것은 중요한 문제가 아닙니다. 나는 그 이유를 알고 싶다. 내 코드에서는 데이터를 보내지 않는 연결을 닫습니다. – takamachi

관련 문제