2012-08-12 10 views
3

성공할 때까지 정기적으로 웹 소켓 연결을 열려고합니다. 그래서 저는 매 5 초마다 노력하고 있습니다. 처음에는 약 1 분 정도 작동하는 것 같습니다. 즉 서버가 비활성화 된 상태에서 연결을 시도한 다음 readyState를 3으로 설정 한 후 즉시 닫고 5 초 후 다른 시도, 또 다른 동일한 응답으로 즉시 닫습니다. 하지만 1 분 또는 2 분 후에 더 이상 연결을 닫지 않고 연결 상태 (readyState == 0)로 멈 춥니 다. 나는 그 후, 서버를 해고하는 경우웹 소켓 연결이 닫히지 않습니다.

function wsConnect() 
    { 
    console.log("trying to connect..."); 
    var socket = new WebSocket("wss://blahblah.com"); 
    socket.onopen=function(){console.log("open");}; 
    socket.onerror=function(){console.log("error");}; 
    socket.onclose=function(msg){console.log("close");}; 

    setTimeout(function(){console.log("RS:"+socket.readyState);socket.close();wsConnect();},5000); 
    } 

흥미롭게도, 그것은까지 대기하고 readyState가 0의 결과 아마도 모든 연결이 이루어 연결 수십 당한다. readystate 0 연결을 완전히 없애 버릴 수있는 방법이 있습니까? 열려 있지 않아 닫을 수 없습니다.

또는 주기적으로 서버를 사용할 수있을 때 연결할 수 있도록 연결 시도를 만들지 만 원하는만큼 많은 수의 연결로 서버를 공격하지 않으려면 어떻게해야합니까?

브라우저 :이 readyState가 0 응답을 시작하면 크롬

, 심지어는 페이지 새로 고침는 해결되지 않습니다. 완전히 새로운 도메인으로 이동 한 다음 돌아가는 것은 다시 설정하는 것입니다.

+0

스택 오버플로에 오신 것을 환영합니다! 어떤 브라우저를 사용하고 있습니까? – starbeamrainbowlabs

+0

죄송합니다. 브라우저는 크롬입니다. Firefox도 비슷한 동작을 보입니다. 나는 그것이 나에게 그것이 얼마나 대단히 특별한 일이 아니라고 생각 하는지를 얼마나 많은 고생이주고 있는지를 믿을 수 없다. 서버가 다시 사용 가능해질 때까지 브라우저가 계속 시도하기 만하면됩니다. 나는이 문제가있는 유일한 사람인가? – poby

+0

아마도 http://crbug.com에서 버그 보고서를 여는 것이 도움이 될 것입니다. – starbeamrainbowlabs

답변

0

첫 번째 연결이 닫힐 때까지 다른 연결을 시도한 다음 onclose 이벤트에서 다시 연결을 시도하면 안됩니다. 이렇게하면 첫 번째 연결이 실패하지 않는 한 다른 연결을 만들지 않습니다.

function wsConnect() 
{ 
    console.log("trying to connect..."); 
    var socket = new WebSocket("wss://blahblah.com"); 
    socket.onopen = function() { console.log("open"); }; 
    socket.onerror = function() { console.log("error"); }; 
    socket.onclose = function(msg) { 
     console.log("close"); 
     setTimeout(wsConnect, 5000); 
    }; 
} 
+0

옙은 그 첫 번째 일을 시도했지만 문제는 1 분 또는 2 분 후에 onclose가 더 이상 전화가 걸리지 않는다는 것입니다. 연결하는 데 막혔을 것입니다. (판독 값 0) – poby

관련 문제